设置类的枚举æˆå‘˜ä¼šæ— æ•ˆä½¿ç”¨â€œæžšä¸¾â€

时间:2019-08-14 06:31:05

标签: c++

class A{
    public:
        enum b{C,D};  
};

int main()
{
    A a;
    a.b = A::C;

    return 0;
}

我明白了

main.cpp:21:7: error: invalid use of ‘enum A::b’
     a.b = A::C;
       ^

为什么?æ®æˆ‘了解,我的枚举b是公开的,我å¯ä»¥ç®€å•åœ°å°†å…¶è®¾ç½®ä¸ºä»»ä½•å€¼

4 个答案:

答案 0 :(得分:7)

enum b{C,D};创建一个å为b的枚举 type 。

如果è¦ä½¿ç”¨å˜é‡ï¼Œåˆ™éœ€è¦å•ç‹¬åˆ›å»ºå®ƒï¼š

enum b{C,D};
b var;

// ...

a.var = A::C;

答案 1 :(得分:4)

更改

enum b {C,D};

å°†b定义为一ç§ç±»åž‹ï¼Œ

enum {C,D} b; 

å°†b声明为未命å枚举的实例。

答案 2 :(得分:1)

您的enum实际上是公开的,您å¯ä»¥å°†instance中的enum设置为A::C或A::D。但是,这行

enum b{C, D};

定义枚举,但ä¸å£°æ˜Žå…¶å®žä¾‹ã€‚因此,

a.b = A::C;

å°è¯•ä¸ºç±»åž‹ a.b分é…一个枚举数。您å¯ä»¥é€šè¿‡ä»¥ä¸‹æ–¹å¼è§£å†³æ­¤é—®é¢˜ï¼š

enum b{C,D} instance;

然åŽå†

a.instance = A::C;

答案 3 :(得分:1)

枚举是类型,而ä¸æ˜¯å˜é‡ã€‚您å¯ä»¥åˆ›å»ºä¸€ä¸ªä»¥æžšä¸¾ä¸ºç±»åž‹çš„å˜é‡ï¼Œä½†è¿™ä¸æ˜¯æ‚¨è¦åšçš„。请改用此方法(我é‡å‘½å了一些东西,因为这样å¯ä»¥ä½¿äº‹æƒ…更加清楚):

class A {
public:
    enum Color { Red, Green };
    Color color;
};

int main()
{
    A a;
    a.color = A::Red;

    return 0;
}

或者正如@lubgr指出的那样:

class A {
public:
    enum Color { Red, Green } color;
};

int main()
{
    A a;
    a.color = A::Red;

    return 0;
}