Ich arbeite derzeit an Accelerated C ++ und bin in Übung 2-3 auf ein Problem gestoßen.
Ein kurzer Überblick über das Programm - das Programm nimmt im Grunde genommen einen Namen an und zeigt dann eine Begrüßung in einem Rahmen aus Sternchen an - dh Hallo! umgeben von * 's gerahmt.
Die Übung - Im Beispielprogramm const int
bestimmen die Autoren den Abstand (Leerzeichen) zwischen der Begrüßung und den Sternchen. Anschließend bitten sie den Leser im Rahmen der Übung, den Benutzer um Eingabe zu bitten, wie groß die Polsterung sein soll.
All dies scheint einfach zu sein. Ich frage den Benutzer nach zwei Ganzzahlen ( int
), speichere sie und ändere das Programm, um diese Ganzzahlen zu verwenden. Dabei entferne ich die vom Autor verwendeten Ganzzahlen, obwohl ich die folgende Warnung erhalte.
Übung 2-3.cpp: 46: Warnung: Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen ganzzahligen Ausdrücken
Nach einigen Recherchen scheint dies daran zu liegen, dass der Code versucht, eine der oben genannten Ganzzahlen ( int
) mit a zu vergleichen string::size_type
, was in Ordnung ist. Aber ich habe mich gefragt - bedeutet das, dass ich eine der ganzen Zahlen ändern sollte unsigned int
? Ist es wichtig, explizit anzugeben, ob meine Ganzzahlen signiert oder nicht signiert sind?
cout << "Please enter the size of the frame between top and bottom you would like ";
int padtopbottom;
cin >> padtopbottom;
cout << "Please enter size of the frame from each side you would like: ";
unsigned int padsides;
cin >> padsides;
string::size_type c = 0; // definition of c in the program
if (r == padtopbottom + 1 && c == padsides + 1) { // where the error occurs
Oben sind die relevanten Codebits aufgeführt, die c
vom Typ sind, string::size_type
da wir nicht wissen, wie lange die Begrüßung dauern könnte - aber warum bekomme ich dieses Problem jetzt, wenn der Code des Autors das Problem bei der Verwendung nicht bekommen hat const int
? Wird dies später in diesem Buch erklärt - für alle, die möglicherweise Accelerated C ++ abgeschlossen haben ?
Ich bin auf Linux Mint und benutze g ++ über Geany, wenn das hilft oder einen Unterschied macht (wie ich gelesen habe, könnte es bei der Bestimmung, was string::size_type
ist).