gpt4 book ai didi

c++ - 普通的C++代码在一个测试项目中通过,而在主要项目中则失败

转载 作者:行者123 更新时间:2023-12-02 10:36:05 24 4
gpt4 key购买 nike

这两个简单的代码行:

const bool equal = (HUGE_VALF == HUGE_VALF);
static_assert(equal == true, "Fatal error");

在测试程序中可以完美地工作(没有警告,没有错误)。

当我将它们复制到主项目中时,在断言中出现此错误:

error C2057: expected constant expression



此处 equal对象是一个值= true的常量。

在两种情况下,这些代码行都在函数内部。

这两个项目具有相同的设置(C++ 11,Visual C++ 2013编译器,Visual C++ 2019 IDE,/ W4,无优化)。

与编译器发生这种不同行为的原因可能是什么?

最佳答案

当更新的Visual Studio IDE(例如VS 2019)首次加载较旧的项目时,它要求重新定位该项目。如果您安装了旧的Visual Studio,则可以拒绝此操作。然后,较新的IDE将使用原始VS的编译器。

加载解决方案之后,在解决方案资源管理器中项目名称旁边,您将拥有将用于编译项目的Visual Studio。
如果缺少括号,则表示使用了当前Visual Studio中的编译器和标准库。

如评论中所述:

I have no parenthesis after the project name (if I am looking in the right place). However, I realised about the issue in the include file paths: Test Project: 14.24.28314\include\cmath; Main Project: Microsoft Visual Studio 12.0\VC\include\cmath, i.e. a much older version, that internally still relies on the C math.h header. So, same compiler (VS2013), different libraries...



这表明您最有可能在VS 2019中重新定位了项目或创建了新项目。

要在VS 2019中使用较旧的编译器创建项目,您需要进入项目的Properties-> Configuration Properties-> General-> Platform Toolset并将其更改为适当的Visual Studio。

另外,请确保所有计算机类型(32位,64位)的所有配置(调试,发行版...)都将该设置设置为相同的值。

由于测试项目使用的是VS 2019-它具有所有必需的定义-因此它可以正常工作。

因此,问题在于,很有可能VS 2013标准库不是C++ 11完整的,并且没有 HUGE_VALF的定义。
但它可能包含 HUGE_VAL 的定义

关于c++ - 普通的C++代码在一个测试项目中通过,而在主要项目中则失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60213653/

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