使用c++ Builder 10 Seattle有很多歧义错误

A lot of ambiguity errors using C++ Builder 10 Seattle

本文关键字:歧义 错误 Seattle c++ Builder 使用      更新时间:2023-10-16

在新的c++ Builder 10 Seattle中编译旧代码时,我得到了很多歧义错误。对于像log()这样的函数,例如:

调用log(10)会产生如下错误:

[bcc32错误]E2015 'std::log(float)在c:program文件(x86) 内河码头 studio 17.0 windows crtl 包括math.h: 394和'std::log(长双精度)在c:program files(x86) 内河码头 studio 17.0 windows crtl math.h:包括430年

感觉应该能够处理这种转换。警告,好吧……但是出现错误并且无法编译?编译器在以后的版本中对这一点更严格了吗?代码最初来自 c++ Builder 2010

其他歧义错误包括void*HWND预期时,在TDateTimePicker->Time (->Time)上做算术之类的事情。现在必须使用Val等。这是编译器以前所接受的,但现在不是。我很高兴现在似乎更严格了……但是它带来了很多旧代码的修复。

这是因为你给了它一个整数,它不知道结果的浮点类型应该是什么。如果你说log(10.0),类型默认为double,它没有歧义。仅仅因为原始整数没有后缀并不意味着编译器可以假设您想要转换后的浮点值的无后缀版本。随着版本的更新,c++对强类型越来越挑剔,所以在较新的编译器中出现这种坚持并不奇怪。

注:只是添加后缀是行不通的。10f并不意味着它是float。您还需要小数或指数(或两者都需要),因此10.f1e1f以及1.e1f也可以工作。