包含std类库时的歧义

时间:2010-02-15 09:00:03

标签: c++

我有Visual Studio 2005。我的一个头文件有一个类似

的枚举

typedef enum {scalar,array,set} increment;

当我尝试包含头文件时,我得到“set”的歧义错误。 我在这个cpp文件中使用std :: set。问题是编译器无法区分std :: set和枚举中的set。

在不声明任何新命名空间的情况下解决此歧义的任何建议

4 个答案:

答案 0 :(得分:6)

不要将std命名空间导入全局命名空间。 STL集在std名称空间中,因此如果标题中没有行using namespace std,则不应该发生冲突。除此之外,重构你的枚举。

答案 1 :(得分:1)

如果您的文件(或其中包含的任何标题)中有using namespace std;,则可能是问题所在。

答案 2 :(得分:0)

尝试在枚举常量前加上“e”

之类的内容

枚举E_increment {eScalar,eArray,eSet}

答案 3 :(得分:-1)

C ++中解决此问题的常用方法是使用更具描述性的值名称。例如,查看Qt enum GestureType。它的值被命名为TapGesture和PanGesture,而不仅仅是“Tap”和“Pan”。在你的情况下,我建议:

enum increment { scalar_increment, array_increment, set_increment };

在下一版C ++中,将以strong enums的形式提供适当的解决方案。