gpt4 book ai didi

c++ - g++ 编译选项 -std=c++14 编译错误显示 Werror=c++11-compat

转载 作者:行者123 更新时间:2023-11-30 00:44:41 27 4
gpt4 key购买 nike

我的环境Arch Linux,gcc 7.2

我正在学习 C++,我正在使用关键字 constexpr 来定义常量,在编译时,它会给我一条错误消息
错误:标识符‘constexpr’是 C++11 [-Werror=c++11-compat] 中的关键字

我可以用默认的 g++ 编译我的程序,但不能用 -std=c++14 和 -Werror 编译

我使用的命令是:

g++ -std=c++14 -O2 -Wall -Werror -Wextra -ansi -flto

我相信 -Werror 选项导致了这个问题。但问题是什么?有人可以告诉我吗?

#include <iostream>

int main() {
constexpr double yen_dollar = 0.107;
std::cout << yen_dollar << std::endl;
return 0;
}
test.cpp:4:5: error: identifier ‘constexpr’ is a keyword in C++11 [-Werror=c++11-compat]
constexpr double yen_dollar = 0.107;
^~~~~~~~~
test.cpp: In function ‘int main()’:
test.cpp:4:5: error: ‘constexpr’ was not declared in this scope
test.cpp:5:16: error: ‘yen_dollar’ was not declared in this scope
std::cout << yen_dollar << std::endl;

最佳答案

来自 GCC 文档 §3.4 Options Controlling C Dialect , 可以阅读:

-ansi

In C mode, this is equivalent to -std=c90. In C++ mode, it is equivalent to -std=c++98.

因为,你编译了

g++ -std=c++14 -O2 -Wall -Werror -Wextra -ansi -flto

-ansi-std=c++98 覆盖 -std=c++14。这就是 constexpr 无法识别的原因。

解决方案:去掉 -ansi 标志。

关于c++ - g++ 编译选项 -std=c++14 编译错误显示 Werror=c++11-compat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548917/

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