gpt4 book ai didi

c++ - 使用 C++ Builder 10 西雅图时出现很多歧义错误

转载 作者:行者123 更新时间:2023-11-28 00:11:29 24 4
gpt4 key购买 nike

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

调用 log(10) 会产生以下错误。

[bcc32 Error] E2015 Ambiguity between 'std::log(float) at c:\program files (x86)\embarcadero\studio\17.0\include\windows\crtl\math.h:394' and 'std::log(long double) at c:\program files (x86)\embarcadero\studio\17.0\include\windows\crtl\math.h:430'

感觉它应该能够处理这种转换。一个警告,很好......但是一个错误并且无法编译?编译器是否在更高版本中对此更加严格?代码最初来自 C++ Builder 2010

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

最佳答案

是因为你给了它一个整数,它不知道得到的 float 类型应该是什么。如果你说 log(10.0) 类型默认为 double 并且它没有歧义。仅仅因为原始整数没有后缀并不意味着编译器可以假定您需要转换后的浮点值的无后缀版本。随着版本的更新,C++ 对强类型变得更加挑剔,因此这种坚持出现在较新的编译器中也就不足为奇了。

注意:仅添加后缀是行不通的。 10f 并不意味着它是一个float。您还需要小数或指数(或两者),所以 10.f 有效,1e1f 有效,1.e1f 也有效.

关于c++ - 使用 C++ Builder 10 西雅图时出现很多歧义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32882786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com