C ++ Builder — множество ошибок неоднозначности при использовании C ++ Builder 10 Seattle

Я получил много неоднозначность ошибки при компиляции старого кода в новом C ++ Builder 10 Seattle. Для функций, таких как журнал() например.

призвание войти (10) генерирует следующую ошибку.

[bcc32 Ошибка] E2015 Неоднозначность между ‘std :: log (float) в c: \ program
файлы (x86) \ embarcadero \ studio \ 17.0 \ include \ windows \ crtl \ math.h: 394 ‘
и ‘std :: log (long double) в программных файлах c: \
(X86) \ Embarcadero \ студия \ 17,0 \ включать \ Windows \ Crtl \ math.h: 430’

Чувствуется, что должно быть в состоянии справиться с этим преобразованием. Предупреждение, хорошо … но ошибка и не может скомпилировать? Стал ли компилятор более строгим с последующими версиями? Код изначально из C ++ Builder 2010.

Другие ошибки неоднозначности включают недействительным * когда HWND ожидалось, делая такие вещи, как арифметика на TDateTimePicker-> Время (-> Time.Val вместо этого нужно использовать сейчас) и т. д. Это было проглочено компилятором раньше, но не сейчас. Я рад, что теперь это кажется более строгим … Но это вносит много исправлений в старый код.

0

Решение

Это потому, что вы дали ему целое число, а оно не знает, каким должен быть результирующий тип с плавающей точкой. Если бы ты сказал log(10.0) тип по умолчанию равен double и в этом нет никакой двусмысленности. То, что исходное целое число не имеет суффикса, не означает, что компилятор может предположить, что вам нужна версия без суффикса преобразованного значения с плавающей точкой. C ++ становится все более требовательным к строгой типизации по мере износа версий, поэтому такая настойчивость появляется в новых компиляторах не удивительно.

NB: просто добавление суффикса не сработает. 10f не значит, что это float, Вам нужен десятичный или показатель степени (или оба), а также, так 10.f работает и 1e1f работает и 1.e1f работает так же.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector