【发布时间】:2011-04-07 09:40:37
【问题描述】:
一些code.cpp文件包含
extern const int v1;
extern const int v2;
extern const int v3;
extern const int v4;
int _tmain(int argc, _TCHAR* argv[])
{
int aee = v1;
switch (aee)
{
case v1:
break;
case v2:
break;
case v3:
break;
case v4:
break;
}
return
}
另一个文件定义.cpp包含
const int v1 = 1;
const int v2 = 2;
const int v3 = 3;
const int v4 = 4;
编译时出现错误 C2051: case expression not constant 但是,当我删除 extern 时,一切都很好。
有没有办法让它与 extern 一起工作?
【问题讨论】:
-
你想用这个达到什么目的?
-
不用extern也能编译吗?重定义不是会报错吗?
-
实际上这是在框架深处以更复杂的方式使用的。我的目标是在更改某些头文件时避免重新编译某些主要部分代码
-
嗯,有点腥味!!如果您需要采用这种方法,那么肯定会有更好的方法(映射、if-else、继承——随便,不是这样的低级 hack)——我的 2c。
-
@hype:常量默认有内部链接,所以如果你在这里删除
extern,你不会得到“多重定义”错误。不过,它们的值都为零。
标签: c++ constants switch-statement extern