В настоящее время я работаю с Accelerated C ++ и обнаружил проблему в упражнении 2-3.
Краткий обзор программы - программа в основном берет имя, а затем отображает приветствие в рамке звездочек - например, Hello! в рамке *.
Упражнение - В примере программы авторы используют const int
для определения отступов (пробелов) между приветствием и звездочками. Затем они просят читателя, как часть упражнения, попросить пользователя ввести информацию о том, насколько большим он хочет, чтобы заполнение было.
Все это кажется достаточно простым, я продолжаю просить пользователя ввести два целых числа ( int
) и сохраните их и измените программу, чтобы использовать эти целые числа, удалив те, которые использовал автор, при компиляции я получаю следующее предупреждение:
Exercise2-3.cpp: 46: предупреждение: сравнение знаковых и беззнаковых целочисленных выражений
После некоторого исследования выяснилось, что код пытается сравнить одно из вышеуказанных целых чисел ( int
) в string :: size_type
, и это нормально. Но мне было интересно - означает ли это, что я должен изменить одно из целых чисел на unsigned int
? Важно ли явно указывать, подписаны ли мои целые числа или нет?
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
Выше соответствующие биты кода, c
имеет тип string :: size_type
, потому что мы не знаем, как долго может быть приветствие - но почему я получаю это проблема сейчас, когда авторский код не Не возникает ли проблема при использовании const int
? Вдобавок - всем, кто, возможно, завершил Accelerated C ++ - будет ли это объяснено позже в книге?
Я использую Linux Mint и использую g ++ через Geany, если это поможет или имеет значение (как я прочитал, что может при определении того, что такое string :: size_type
).