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