C ++ 11:如何初始化私有静态const成员?

时间:2020-04-23 18:25:10

标签: c++11 static initialization private member

查看此演示代码:

enum class Solid {gold, silver, wood};
enum class Liquid {bier, wine, oil};
enum class Gas {air, elio, argon};

class P {
private :
    struct Set {
        Solid   solid;
        Liquid  liquid;
        Gas     gas;
    };
    static const Set set[];
};

const P::set = {
        {gold, wine, air}
};

GCG告诉我:

error: ‘const P::Set P::set []’ is private within this context
 const P::set = {
          ^~~

怎么了? 是的,我想初始化一个不在类定义中的静态私有类成员。

有人可以向我解释该怎么做吗? 预先感谢!

2 个答案:

答案 0 :(得分:0)

您的代码中有一堆问题:

  • 您没有在定义中指定P::set的类型
  • 您使用了enum class,但是没有保证枚举值的质量(gold等)

答案 1 :(得分:0)

此代码按预期工作:

enum class Solid {gold, silver, wook};
enum class Liquid{bier, wine, oil};
enum class Gas{air, elio, argon};

class P {
private:
    struct Set {
        Solid solid;
        Liquid liquid;
        Gas gas;
    };
    static const Set set[];
};

const P::Set P::set[]{ Solid::gold, Liquid::wine, Gas::air };

您在初始化时忘记了类型标识符P::Set以及枚举的类标识符。