c++ - 如何在另一个命名空间中键入定义一个命名空间的枚举并使用 ist c++

标签 c++ enums namespaces

<分区>

Possible Duplicate:
How do you import an enum into a different namespace in 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
}

最佳答案

当您对类型进行 typedef 时,您不会导入在该命名空间中定义的符号。所以虽然你可以写:

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 打包到一个命名空间中,并且通常也会在另一个命名空间中进行 typedef。

关于c++ - 如何在另一个命名空间中键入定义一个命名空间的枚举并使用 ist c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545157/

相关文章:

c++ - 分配一个新构造的 shared_ptr

c++ - 如何安装 Modular Boost?

Java 枚举与字符串常量

ruby-on-rails - Has_many 上的 Rails Enum 问题,通过...无法从我的 Controller 调用方法

java - 检查字符串是否包含在枚举集中,时间复杂度为 O(1)

r - 数据未从 R 中的命名空间导出

c# - 使用 XPATH 在带有命名空间的 XML 中选择节点的问题

c++ - 在 Windows 中配置 cmake 项目时未找到 Eigen3_DIR

c++ - 我可以安全地将常量值写入 C++ 中多个线程的变量吗?

xpath - 使用Java在DOM4j中解析具有自己命名空间的子节点