0
non-static data member initializers only available with -std=c++11 or -std=gnu++11 
[enabled by default]
     int Red = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
     int Green = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11 
[enabled by default]
     int Blue = 255;

不知道为什么这不起作用。

struct color {
    int Red = 255;
    int Green = 255;
    int Blue = 255;
};
4

4 回答 4

5

启用 c++11 或:

struct Color
{
    int Red;
    int Green;
    int Blue;
    Color() : Red(255), Green(255), Blue(255) {}
};
于 2014-10-13T23:37:29.687 回答
3

非静态数据成员初始值设定项是仅存在于 C++11 版本语言规范的功能。默认情况下,您使用的编译器无法在 C++11 模式下运行。为了将编译器切换到 C++11 模式,您必须指定-std=c++11(或-std=gnu++11) 命令行选项。这就是你的编译器告诉你的(非常明确,我可能会补充)。

在 C++11 之前的语言版本中没有这样的功能。这就是为什么它“不起作用”。

于 2014-10-13T23:39:18.720 回答
0

您需要启用 C++ 11 或添加-std=c++11标志进行编译,因为您尝试执行的操作仅在 C++11 中可用

于 2014-10-13T23:52:06.800 回答
0

在 C++11 之前,您只能在构造函数的成员初始化器列表中初始化非静态数据成员。在 C++11 中,您可以使用大括号或等号初始化程序,如代码中所示。但是,如果您的 NSDM 有一个大括号或等号初始化程序并出现在成员初始化程序列表中,则该大括号或等号初始化程序将被忽略。因此,以下内容适用于 C++03 和 C++11:

struct Color
{
    int Red;
    int Green;
    int Blue;
    Color() : Red(255), Green(255), Blue(255) {}
};

但是,由于您有一个 C++11 就绪的编译器,请使用-std=c++11它来启用它。

于 2014-10-14T00:04:15.160 回答