什么是C++11扩展[-Wc++11-extensions]

dnph8jn4  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(172)

我需要一些帮助来了解此错误发生的位置:
警告:非静态数据成员的类内初始化是C++11扩展[-Wc++11-extensions]
这是它来自的代码部分:

typedef struct Hand {
    bool straight = false;
    bool flush = false;
    bool four = false;
    bool three = false;
    int pairs = 0;
    } Hand;
yzxexxkh

yzxexxkh1#

这不是一个错误,而是一个警告,它告诉你只允许初始化从C11标准开始的结构体/类的非静态成员(之所以这么叫是因为它是在2011年发布的)。在此之前,C98不允许你这么做(出版于1998年,你已经猜到了)。长话短说,你所做的只是在2011年才成为法律的的,官方的C++。你的编译器的默认值似乎是1998年的标准。
尝试使用-std=c++11作为命令行标志进行编译(假设您使用的是GCC或clang),警告应该会消失。如果您使用的是不同的编译器,也应该有相应的标志(如果它足够新,可以实现C++11)。

mrfwxfqh

mrfwxfqh2#

如果在VS代码中使用Code Runner扩展,则必须配置Code-runner: Executor Map。在"code-runner.executorMap"中添加-std=c++17
正如@Răzvan Cojocaru在上面详细介绍的那样,-std=c++11可以工作,但我想使用最新的版本。

相关问题