【发布时间】:2018-03-23 10:43:37
【问题描述】:
我在一个类中声明了一个枚举,然后尝试在不同的类中访问它。这在 vs2010 上工作得很好,但在 g++ 上失败了,错误“不是类或命名空间名称”
//Manager.h
class TestMgr
{
public:
typedef enum
{
kError,
kRun,
kFly,
kDefault = kRun
}Mode;
};
主要功能
//main.cpp
#include"Manager.h"
int main()
{
TestMgr::Mode _mode = TestMgr::Mode::kDefault;
}
这给了我一个编译错误:“TestMgr::Mode”不是类或命名空间
请指导。
编辑:我看到有一个类似的问题here,但它谈论的是全局声明的枚举,而不是在一个类中。
【问题讨论】:
-
你为什么在这里使用
typedef?还有一个错字:kGDefault!=kDefault。 -
你没有在这里显示任何包含,你是忘记了还是没有?
-
在这里保持代码简约。我在尝试编译时添加了标题。
-
好的,所以想通了语法TestMgr::Mode::kDefault;不适用于 GCC。您应该将其用作 TestMgr::kDefault;而是