На даний момент я працюю над Accelerated C ++ і натрапив на проблему під час вправи 2-3.
Короткий огляд програми - програма в основному бере назву, а потім відображає привітання в рамках зірочок - тобто Привіт! оточений обрамлений *.
Вправа - У прикладі програми автори використовують const int
для визначення заповнення (пробіли) між привітанням та зірочками. Потім вони просять читача, як частину вправи, попросити користувача ввести, наскільки великим вони хочуть бути прокладкою.
Все це здається досить простим, я продовжую запитувати у користувача два цілих числа ( int
) і зберігаю їх і змінюю програму на використання цілих чисел, вилучаючи ті, що використовуються автором, під час компіляції, хоча я отримую таке попередження;
Вправа2-3.cpp: 46: попередження: порівняння між підписаними та беззнаковими цілими виразами
Після деяких досліджень здається, що код намагається порівняти одне з вищезазначених цілих чисел ( int
) з a 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
є).