我需要一些帮助来了解此错误发生的位置:警告:非静态数据成员的类内初始化是C++11扩展[-Wc++11-extensions]这是它来自的代码部分:
typedef struct Hand { bool straight = false; bool flush = false; bool four = false; bool three = false; int pairs = 0; } Hand;
yzxexxkh1#
这不是一个错误,而是一个警告,它告诉你只允许初始化从C11标准开始的结构体/类的非静态成员(之所以这么叫是因为它是在2011年发布的)。在此之前,C98不允许你这么做(出版于1998年,你已经猜到了)。长话短说,你所做的只是在2011年才成为法律的的,官方的C++。你的编译器的默认值似乎是1998年的标准。尝试使用-std=c++11作为命令行标志进行编译(假设您使用的是GCC或clang),警告应该会消失。如果您使用的是不同的编译器,也应该有相应的标志(如果它足够新,可以实现C++11)。
-std=c++11
mrfwxfqh2#
如果在VS代码中使用Code Runner扩展,则必须配置Code-runner: Executor Map。在"code-runner.executorMap"中添加-std=c++17正如@Răzvan Cojocaru在上面详细介绍的那样,-std=c++11可以工作,但我想使用最新的版本。
Code Runner
Code-runner: Executor Map
"code-runner.executorMap"
-std=c++17
2条答案
按热度按时间yzxexxkh1#
这不是一个错误,而是一个警告,它告诉你只允许初始化从C11标准开始的结构体/类的非静态成员(之所以这么叫是因为它是在2011年发布的)。在此之前,C98不允许你这么做(出版于1998年,你已经猜到了)。长话短说,你所做的只是在2011年才成为法律的的,官方的C++。你的编译器的默认值似乎是1998年的标准。
尝试使用
-std=c++11
作为命令行标志进行编译(假设您使用的是GCC或clang),警告应该会消失。如果您使用的是不同的编译器,也应该有相应的标志(如果它足够新,可以实现C++11)。mrfwxfqh2#
如果在VS代码中使用
Code Runner
扩展,则必须配置Code-runner: Executor Map
。在"code-runner.executorMap"
中添加-std=c++17
正如@Răzvan Cojocaru在上面详细介绍的那样,
-std=c++11
可以工作,但我想使用最新的版本。