这个问题已经在这里有了答案:




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。

07-27 13:17