c ++开关枚举错误

时间:2016-04-04 11:24:59

标签: c++ c++11 enums

我正在使用枚举创建一个简单的切换功能,但是我收到错误'ACT'未定义的标识符。在AS.cpp。不知道我在这里做错了什么......

如果你能帮忙解释为什么我会收到这个错误,那就太好了。 THANKYOU

//AS.h

#ifndef AS_H
#define AS_H

class AS {
private:
    enum class state_region;

public:

    int determine_FDI(state_region selected_state_region);
};

#endif



/////////AS.cpp
        #include "AS.h"

enum class state_region {ACT};

int AS::determine_FDI(state_region selected_state_region) {
    int FDI;

    switch (selected_state_region) {
    case ACT:
        FDI = 100;
        break;
}
}

4 个答案:

答案 0 :(得分:4)

" enum class"在C ++ 11中引入的也被称为"范围枚举"。

这清楚地突出了与" enum"的区别,现在enum值存在于专用范围内。

您需要将范围添加到"案例"像这样:

case state_region::ACT:

而不是

case ACT:

最后一行是在当前范围内查找ACT标识符,但无法找到它,因此出错。

答案 1 :(得分:0)

以下代码正常运行:

/////////AS.cpp
#include "AS.h"

enum class AS::state_region {ACT};

int AS::determine_FDI(state_region selected_state_region) {
    int FDI;

    switch (selected_state_region) {
        case state_region::ACT:
            FDI = 100;
            break;
    }

    return 0;
}

答案 2 :(得分:0)

使用enum class而不是传统的enums,枚举值的范围包含在其中,这意味着您必须使用它们:state_region::ACT。必须这样做的好处是,现在多个枚举可以使用相同的值名称。

此外,在cpp文件中定义state_region的方式使其成为全局范围内的新枚举。要正确定义您在类中声明的那个,请使用enum class AS::state_region {ACT};(与定义方法和静态字段的方式相同)。

答案 3 :(得分:0)

首先,未定义类AS 中的枚举类state_region 。见评论:

/////////AS.cpp
#include "AS.h"

// This defines ::state_region in the global scope
//enum class state_region {ACT};

// This is the definition of AS::state_region
enum class AS::state_region {ACT};

其次,枚举类的枚举器在全局范围内不可用。您需要使用 state_region :: ACT来访问它:

int AS::determine_FDI(state_region selected_state_region) {
    int FDI;

    switch (selected_state_region) {
    case state_region::ACT:           // <-- state_region:: required
        FDI = 100;
        break;
}
}