我有Visual Studio 2005。我的一个头文件有一个类似
的枚举typedef enum {scalar,array,set} increment;
当我尝试包含头文件时,我得到“set”的歧义错误。 我在这个cpp文件中使用std :: set。问题是编译器无法区分std :: set和枚举中的set。
在不声明任何新命名空间的情况下解决此歧义的任何建议
答案 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的形式提供适当的解决方案。