【问题标题】:What is a C++11 extension [-Wc++11-extensions]什么是 C++11 扩展 [-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

标签: c++ c++11 warnings typedef in-class-initialization


【解决方案1】:

这不是错误,而是警告。它告诉您,您只能初始化从 C++11 标准开始的结构/类的非静态成员(之所以这么称呼,是因为它于 2011 年发布)。在此之前,C++98 并没有正式允许你这样做(你猜对了,它是在 1998 年发布的)。长话短说,你所做的只是在 2011 年才成为合法的官方 C++。你的编译器的默认值似乎是 1998 年的标准。

尝试使用-std=c++11 作为命令行标志进行编译(假设您使用的是 GCC 或 clang),警告应该会消失。如果您使用的是不同的编译器,也应该有一个标志(如果它足够新以实现 C++11)。

【讨论】:

    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 2018-11-03
    • 2018-12-05
    • 2021-07-11
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多