Мне очень нравятся WxWidgets, и я начал с программирования на C ++.Моя программа-пример конвертирует Цельсий в Фаренгейты из текстовой формы.Вот мой базовый код:
//get "100" from textbox
wxString szCelsius = TextCtrl1->GetValue();
long lCelsius;
//attempt to cast into long
szCelsius.ToLong(&lCelsius, 10);
//formula that works in normal cases to get fahrenheit
long lFahrenheit = ((9.f/5.f) * lCelsius + 32);
//SOMEHOW this works:
//long lFahrenheit = ((9.f/5.f) * 100 + 32);
//display debug info, note it displays lCelsius as 100
wxString debuginfo;
debuginfo << _T("deg C: ") << lCelsius << _T("\n");
//displays incorrectly as 211
debuginfo << _T("deg F: ") << lFahrenheit << _T("\n");
//this displays 100
std::cout << lCelsius;
//this fails though
assert(lCelsius == 100);
Теперь с отладочной информацией lCelcius равен 100, как и ожидалось, но возвращает фаренгейт как 211 вместо 212!Странно то, что формула отлично работает в чистом C, и когда я заменяю lCelsius
на 100
, она прекрасно работает, даже если в моей отладочной информации четко указано, что это 100.
Видите ли вы какие-либо очевидныепроблема или я просто не в состоянии сделать такую простую вещь?Я не совсем уверен, что делает Wx, чтобы сделать его на один меньше, чем следовало бы.
EDIT : в том числе assert.h и запуск lCelsius == 100 не удается в отладчике, но std ::cout lCelsius возвращает 100. Должно быть что-то не так с Wx, которое искажает результат, но все еще имеет значение «100» ..