Итак, идея состоит в том, что для каждого числа нажатых число нажимается на nums
deque. Затем, когда нажата десятичная кнопка, она выталкивает все nums
на новый deque, называемый specialDecimal
, и нажимаем кнопку «.». после этих чисел. Также задано логическое значение, которое называется decimalClicked
. Итак, теперь у меня есть числа до десятичной + десятичной. Затем, когда оператор нажат, он подталкивает числа в nums
, которые являются числами после десятичного знака в specialDecimal
. Итак, когда равно нажатие кнопки я сделать специальную оценку для decimalClicked
:C++ toDouble() преобразует строку в 0
//special case if decimal is pressed
double actualVal = 0;
QString s = "";
bool ok; //for toDouble
if(decimalClicked){
while(!(specialDecimal.empty())){
QString s = specialDecimal.front();
cerr << s.toStdString();
s.append(s);
specialDecimal.pop_front();
}
cerr << endl << "should be whole string number: " << s.toStdString();
actualVal = s.toDouble(&ok);
cerr << endl << "should be value: " << actualVal;
nums.push_front(actualVal);
}`
Выход для КВЖД является:
8.1
should be whole string number:
should be value: 0
сегга оператор печати внутри время цикла показывает, что она разбор десятичного числа правильно. Операция cerr прямо под циклом while не выводит всю строку. Также отображается результат в основном 0 + the second number
, если я делаю оператор +
. При необходимости я могу показать больше кода.
Вы, кажется, ожидать, что какой-то темной магии, два вхождения 's' в' s.append (ы) 'относятся к двум различным объектам. Дайте разные имена различным переменным. –
Ничего себе, это сделал трюк. Я думал, что просто добавит к нему свою текущую QString ?? Но спасибо!! –
Да, он добавляет строку, объявленную внутри цикла, к себе; сразу же после того, как в закрывающей скобке цикла эта строка будет уничтожена. Строка, объявленная вне цикла - тот, который вы вызываете 'toStdString', остается пустым. Вся ваша петля эквивалентна 'specialDecimal.clear()'; он ничего не добивается. –