Думаете я не пробовал))) После "=" в любом случае 0 (почти в любом) При делении другой немного баг, скажем 123/123 дает на экран 123123 после "=" получаем "F", при остальных операциях 0.
значит так. не работает, потому что не заносится операция в стэк.
в файле calculator.cpp последний else надо переписать следующим образом:
было ... else { m_stk.push (QString ().setNum (m_plcd -> value())); m_strDisplay = ""; m_plcd -> display ("0"); }
надо else { m_stk.push(QString("%0").arg(m_plcd->value())); m_stk.push(str); m_strDisplay = ""; }
Заработало! В книге ошибка, перепроверил, там так у меня было. При тесте заметил, что 10/5=0.2
было: double dOperand1 = m_stk.pop().toDouble(); QString strOperation = m_stk.pop(); double dOperand2 = m_stk.pop().toDouble(); double dResult = 0;
сделал double dOperand2 = m_stk.pop().toDouble(); QString strOperation = m_stk.pop(); double dOperand1 = m_stk.pop().toDouble(); double dResult = 0;
Хотя это из Шлее. Вместе с книгой идёт диск с этими примерами.
Эта. У нас она без диска и значительно дешевле, да и если самому писать, код лучше запоминается и потом легче его описание понимается.
Я в таких случаях пошагово дебажить начинаю. Ставьте бряк где-нибудь вот здесь:
QString str = ((QPushButton*)sender())->text();
и понеслась.
что значит не хочет считать? в чем это проявляется?
хотя конечно, проще самому отдебажить. если знаешь как )))
/*-+= сбрасывают на 0.
ну так вводите следующее число и жмите равно. все должно работать, кмк.
Думаете я не пробовал))) После "=" в любом случае 0 (почти в любом) При делении другой немного баг, скажем 123/123 дает на экран 123123 после "=" получаем "F", при остальных операциях 0.
значит так. не работает, потому что не заносится операция в стэк.
в файле calculator.cpp последний else надо переписать следующим образом:
было
...
else {
m_stk.push (QString ().setNum (m_plcd -> value()));
m_strDisplay = "";
m_plcd -> display ("0");
}
надо
else {
m_stk.push(QString("%0").arg(m_plcd->value()));
m_stk.push(str);
m_strDisplay = "";
}
Заработало! В книге ошибка, перепроверил, там так у меня было. При тесте заметил, что 10/5=0.2
было:
double dOperand1 = m_stk.pop().toDouble();
QString strOperation = m_stk.pop();
double dOperand2 = m_stk.pop().toDouble();
double dResult = 0;
сделал
double dOperand2 = m_stk.pop().toDouble();
QString strOperation = m_stk.pop();
double dOperand1 = m_stk.pop().toDouble();
double dResult = 0;
Отправить комментарий