C++ 访问命名空间中的枚举
在标题中,我有这样的设置C++ 访问命名空间中的枚举,c++,enums,namespaces,C++,Enums,Namespaces,在标题中,我有这样的设置 namespace NS { typedef enum { GOOD, BAD, UGLY }enum_thing; class Thing { void thing(enum_thing elem); } } 当然,还有另一个cpp文件,与该头一起使用。然后我有一个包含main的线程cpp文件。在这个cpp文件中,我使用该枚举传递给方法 using namespace NS; int main() { Thing t(
namespace NS {
typedef enum { GOOD, BAD, UGLY }enum_thing;
class Thing {
void thing(enum_thing elem);
}
}
当然,还有另一个cpp文件,与该头一起使用。然后我有一个包含main的线程cpp文件。在这个cpp文件中,我使用该枚举传递给方法
using namespace NS;
int main() {
Thing t();
t.thing(BAD);
}
当然,我从G++中得到了其他错误,说没有声明BAD。关于如何克服这个错误有什么帮助吗?您能避免使用typedef吗?只要做:
enum Foobar {good, bad, hello};
在纠正了示例代码中的许多小语法错误之后,它对我来说编译得很好。检查你的名字拼写是否正确。能否以NS::BAD的身份访问枚举?也许您没有包含正确的标题?确保你有 在顶部包括FileWithEnum.h
namespace NS {
typedef enum { GOOD, BAD, UGLY }enum_thing;
class Thing {
public:
void thing(enum_thing elem){}
};
}
using namespace NS;
int main() {
Thing t;
t.thing(BAD);
return 0;
}
自己测试一下:
它应该能工作。对我来说,Mystagogue的变体也应该起作用。我知道你还有其他错误消息
您可能只需要将标题修改为语法正确,比如在类的末尾放一个分号,等等。当标题正常时,关于不在名称空间中的坏消息也应该消失。它应该是t;不事ta公:前缺的是方法和一个;在类声明结尾处,在关闭}之后缺少。如果完全限定枚举,该怎么办:NS::BAD。老编译器不喜欢这个。在这种情况下,不需要用C++来打字。这里一个匿名枚举被定义为typedef'ed。