Как использовать целое число фиксированной ширины в приложениях Windows Forms (C ++) - PullRequest
0 голосов
/ 16 января 2019

У меня есть приложение Windows Forms с полем ввода. Я разделяю пользовательский ввод и помещаю его в вектор, затем меняю его на удвоение. После этого я вызываю функцию, которая вычисляет логарифм, но целочисленные значения фиксированной ширины, которые я использую, округляются / обрезаются в приложении Windows Forms (этого не происходит в консоли). Даже если я попытаюсь определить его в самом заголовке форм, он будет обрезан, однако я хочу вывести правильный номер в моем приложении форм, а не только в консольном приложении.

uint16_t log2(uint32_t n) {
if (n == 0) return 0;
uint16_t logValue = -1;
while (n) {
    logValue++;
    n >>= 1;
}
return logValue;
}

Например, когда я ввожу '10', вывод должен быть 3.3219280948873623478703194294894 (округлено, но вы получаете точку), и оно работает в моем консольном приложении (которое я использую для тестирования всех своих функций), однако, когда я передаю его в свои формы Приложение выводит только 3 (или 0,1,2,4,5,6,7,8 ... без пропущенных десятичных знаков с другим вводом).

1 Ответ

0 голосов
/ 16 января 2019

вывод должен быть 3.3219280948873623478703194294894, и он работает в моем консольном приложении

У вас есть конфликт имен между вашей log2 функцией и стандартной библиотекой std::log2(). Поскольку библиотечная функция предоставляется для всех целочисленных типов , она лучше подходит, когда оба найдены по разрешению имени.

Измените вашу функцию на уникальное имя, тогда ваши результаты тестирования WinForms и консоли будут отражать ее фактическое поведение (возвращать целое число).

...