0

我在代码库中有一个类似于以下内容的库:

namespace rat {

   ...

   enum myEnum {
      BLUE,
      RED
   }

   ...
} //namespace rat

后来我尝试使用之前的库在代码库中编译一个应用程序,当我使用命名空间rat(代码库主命名空间)时,它警告我有歧义,说 BLUE 可能是rat::myEnum rat::BLUErat::enums::Freq rat::enums::BLUE来自我不熟悉的其他文件(而且不是我的)在命名空间 rat 中的命名空间枚举中有一个名为 BLUE 的枚举 Freq ......

用户代码中有没有办法说出我现在想要哪个?或者我是否必须将 mylibs 枚举嵌套在命名空间 mylib 中,然后说 rat::enums::BLUE 或 rat::mylib::BLUE ?

4

2 回答 2

6

枚举常量的完整明确名称将是::rat::BLUE,::rat::enums::BLUE等。

请记住,::表达式开头的 代表全局命名空间

于 2012-07-11T19:30:24.453 回答
4

我通常在 C++03(C++11 之前!)中做的是将 s 嵌套enumstructs 中,因此它们不会泄漏:

namespace rat {
  struct myEnum {
    enum Enum {
      blue, red
    };
  };
}

您必须将变量定义为rat::myEnum::Enum并将值定义为rat::myEnum::blue,但通常myEnum应该是有意义的东西,例如Color,因此命名不是多余的。

这在某种程度上模拟了 C++11 class enum,因此如果您可以访问 C++11 编译器,则应该使用这些。

于 2012-07-11T19:30:09.157 回答