什么是 C++11 扩展 [-Wc++11-extensions]
Posted
技术标签:
【中文标题】什么是 C++11 扩展 [-Wc++11-extensions]【英文标题】:What is a C++11 extension [-Wc++11-extensions] 【发布时间】:2017-07-24 22:35:43 【问题描述】:我需要一些帮助来了解此错误发生的位置:
警告:非静态数据成员的类内初始化是 C++11 扩展 [-Wc++11-extensions]
这是它来自的代码部分:
typedef struct Hand
bool straight = false;
bool flush = false;
bool four = false;
bool three = false;
int pairs = 0;
Hand;
【问题讨论】:
删除初始化器,所有= false;
和= 0;
这只是struct Hand
的定义,当你有struct Hand
的实例时你需要初始化字段。看看this
【参考方案1】:
这不是错误,而是警告。它告诉您,您只能初始化从 C++11 标准开始的结构/类的非静态成员(之所以这么称呼,是因为它于 2011 年发布)。在此之前,C++98 并没有正式允许你这样做(你猜对了,它是在 1998 年发布的)。长话短说,你所做的只是在 2011 年才成为合法的官方 C++。你的编译器的默认值似乎是 1998 年的标准。
尝试使用-std=c++11
作为命令行标志进行编译(假设您使用的是 GCC 或 clang),警告应该会消失。如果您使用的是不同的编译器,也应该有一个标志(如果它足够新以实现 C++11)。
【讨论】:
以上是关于什么是 C++11 扩展 [-Wc++11-extensions]的主要内容,如果未能解决你的问题,请参考以下文章