我正在使用枚举创建一个简单的切换功能,但是我收到错误'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;
}
}
答案 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;
}
}