这个问题已经在这里有了答案:
9年前关闭。
如何解决以下枚举 namespace 问题?
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
}
最佳答案
在键入类型的类型时,您不会导入在该命名空间中定义的符号。因此,尽管您可以编写:
int main() {
B::BBar enumVariable=A::a;
}
您无法访问
B::a
,因为该符号不存在。我认为,部分遍历以及使代码更简洁(虽然写起来也更长)的一种方法是将每个枚举打包到其自己的结构中,例如:
struct ABar {
enum Type {a, b};
};
typedef ABar BBar;
int main() {
ABar::Type var=ABar::a;
BBar::Type var2=BBar::a;
}
如果仍然需要,您将能够将ABar打包到一个 namespace 中,并且通常也可以在另一个 namespace 中typedef。