DrF*_*oid 3 c++ enums namespaces
可能重复:
如何在C++中将枚举导入不同的命名空间?
如何解决以下枚举命名空间问题?
namespace A {
typedef enum ABar { a, b };
void foo( ABar xx ) {}
}
namespace B {
typedef enum A::ABar BBar;
void foo( BBar xx ) { A::foo( xx ); }
}
int main() {
B::foo( B::a ); // 'a' : is not a member of 'B'
// 'a' : undeclared identifier
}
Run Code Online (Sandbox Code Playgroud)
键入一个类型时,不会导入该命名空间中定义的符号.所以你可以写:
int main() {
B::BBar enumVariable=A::a;
}
Run Code Online (Sandbox Code Playgroud)
您无法访问,B::a
因为此符号不存在.
在我看来,部分解决方法是使代码更加干净,尽管编写时间更长,但是将每个枚举打包到自己的结构中,例如:
struct ABar {
enum Type {a, b};
};
typedef ABar BBar;
int main() {
ABar::Type var=ABar::a;
BBar::Type var2=BBar::a;
}
Run Code Online (Sandbox Code Playgroud)
如果您仍然需要它,您将能够将ABar打包到命名空间中,并且通常也会在另一个命名空间中输入typedef.