2016-04-04 142 views
0

我正在使用枚举做一个简单的开关函数,但是我得到错误'ACT'未定义的标识符。在AS.cpp中。不知道我在这里做错了什么...c + +开关枚举错误

如果你可以请帮忙解释为什么我得到这个很好的错误。三江源

//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; 
} 
} 
+1

你必须使用'state_region :: ACT'。 – Jarod42

回答

0

首先,枚举类state_region里面类AS未定义。看评论:

/////////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; 
} 
} 
0

下面的代码工作正常:在介绍了C++ 11也被称为

/////////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; 
} 
4

“枚举类”, “作用域枚举”。

这明显突出了与“枚举”的区别,枚举值现在生活在一个专门的范围内。

您需要的范围添加到您的“案例”像这样的:

case state_region::ACT: 

代替

case ACT: 

最后一行是在当前范围寻找ACT标识符,但它不能找到它,因此错误。

0

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

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