【发布时间】:2011-02-10 14:03:56
【问题描述】:
这就是我想做的:
enum MyEnum
{
ONE = 1, TWO, THREE
};
template<class T>
void func()
{
cout << T::TWO << endl;
}
int main()
{
func<MyEnum>();
};
它有效,但我收到警告:“警告 C4482:使用了非标准扩展:限定名称中使用了枚举 'MyEnum'”
如何在不收到警告的情况下执行此操作
【问题讨论】:
-
enum E1 { ONE, TWO }; enum E2 { ONE, TWO };给出了“ONE的冲突声明”,正如我所料 -enum E1的值不会进入命名空间E1。你在期待什么? -
TWO在您的MyEnum中定义,它不是您所显示的类或命名空间的一部分。枚举不声明范围,因此不使用范围运算符解析。 -
但这是我想做的,我希望能够同时传递 E1 和 E2 并在打印时获得不同的值
-
那么你需要使用
class或struct,而不是enum。 -
你用的是什么编译器?我见过的几乎每个 G++ 编译器 [linux 和 osx] 都会产生 T::TWO 错误