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

问题描述 投票:0回答:2

查看此演示代码:

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 = {
          ^~~

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

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

c++11 static initialization private member
2个回答
0
投票

您的代码中有很多问题:

  • 您未在其定义中指定P::set的类型
  • 您使用了enum class,但没有对枚举值进行质量处理(gold等)

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以及枚举的类标识符。

© www.soinside.com 2019 - 2024. All rights reserved.