非静态数据成员初始化程序c ++

时间:2014-10-13 23:35:18

标签: c++ c++11 non-static data-members

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 个答案:

答案 0 :(得分:5)

启用c ++ 11或:

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

答案 1 :(得分:3)

非静态数据成员初始值设定项是仅存在于C ++ 11版本的语言规范中的功能。默认情况下,您使用的编译器在C ++ 11模式下不起作用。要将编译器切换到C ++ 11模式,您必须指定-std=c++11(或-std=gnu++11)命令行选项。这就是您的编译器告诉您的内容(非常明确地说,我可能会添加)。

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

答案 2 :(得分:0)

您需要启用C ++ 11或添加-std=c++11标志才能编译,因为您尝试做的只能在C ++ 11中使用

答案 3 :(得分:0)

Pre-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 ready编译器,请使用-std=c++11启用它。