Предупреждение - сравнение знаковых и беззнаковых целочисленных выражений

В настоящее время я работаю с 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 ).

66
задан BartoszKP 4 July 2014 в 09:22
поделиться