-O123 with -std = c 1y1198 – 如果包含我收到错误:’_hypot’未在此范围中声明

-O123 with -std = c 1y1198 – 如果包含我收到错误:’_hypot’未在此范围中声明,第1张

概述我刚刚使用mingw-get-setup更新了MinGW,我无法构建包含< cmath>如果我用-std = c 1y使用大于-O0的任何标题. (我也试过c 11和c 98)我收到像这样的错误: g++.exe -pedantic-errors -pedantic -Wextra -Wall -std=c++1y -O3 -c Z:\Projects\C++\L6\src\events.cpp 我刚刚使用mingw-get-setup更新了MinGW,我无法构建包含< cmath>如果我用-std = c 1y使用大于-O0的任何标题. (我也试过c 11和c 98)我收到像这样的错误:
g++.exe -pedantic-errors -pedantic -Wextra -Wall -std=c++1y -O3  -c Z:\Projects\C++\L6\src\events.cpp -o obj\src\events.oIn file included from z:\lander\mingw\lib\gcc\mingw32.8.1\include\c++\cmath:44:0,from Z:\Projects\C++\L6\src\utils.h:4,from Z:\Projects\C++\L6\src\events.cpp:10:z:\lander\mingw\include\math.h: In function 'float hypotf(float,float)':z:\lander\mingw\include\math.h:635:30: error: '_hypot' was not declared in this scope { return (float)(_hypot (x,y)); }

我身边有什么问题吗?
或者在mingw repo版本被检测到?如果是这样,这个头部是否有任何快速修复?

解决方法 为了避免任何进一步的猜测,以及使用#if 0的彻底的坏建议,请从MinGW项目的贡献者的角度给出权威的答案.

是的,MinGW.org的include / math.h实现确实在它的inline实现中有一个缺陷(float,float);当编译C时,会引发错误,其中包含受影响的头(如果包含cmath),并指定导致__STRICT_ANSI__定义的任何编译器选项(如–std = c …的情况) OP指出的选项).适当的解决方案不是封闭一部分math.h文件,而是使用#if 0或其他方式,但是要纠正破坏的infp(float,float)的内联实现;只需从内联引用_hypot(float,float)中删除虚假的引导下划线,其返回值将被转换为浮点型返回类型就足够了.

或者,在编译器选项中替换等效的-std = gnu … for -std = c …可以避免该错误,并可能提供合适的解决方法.

FWIW,我并不满意MinGW.org目前的hypotl(long double,long double)的实现;纠正这两个问题是在我的下一个版本的MinGW运行时的打孔列表,但ATM,我没有时间致力于准备这个.

更新

MinGW.org运行时库(当前为mingwrt-3.22.4,但自3.22版本以来已修复)的现有版本中不再存在此错误.如果您使用的任何旧版本(包括任何严重破坏的4.x版本)都应升级.

总结

以上是内存溢出为你收集整理的-O1 / 2/3 with -std = c 1y / 11/98 – 如果包含我收到错误:’_hypot’未在此范围中声明全部内容,希望文章能够帮你解决-O1 / 2/3 with -std = c 1y / 11/98 – 如果包含我收到错误:’_hypot’未在此范围中声明所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存