我注意到我的一些函数实际上并没有访问这个对象,所以我把它们做成了static
。然后编译器告诉我他们访问的所有变量也必须是静态的 - 至今为止,这是很容易理解的。我有一堆字符串变量,如C++初始化类中的静态变量?
string RE_ANY = "([^\\n]*)";
string RE_ANY_RELUCTANT = "([^\\n]*?)";
等等。然后我把它们全部制作成static const
,因为它们从不改变。但是,如果我将它们移出课程,我的程序只会编译:否则,MSVC++ 2010会抱怨:“只有静态常量整型变量可能会在类中初始化”。
那真是不幸。有没有解决方法?我想让他们留在他们所属的班级中。
它们现在是const - 它们只需要是静态的,以便我可以在静态成员函数中使用它们。这条规则的原因是什么,他们必须在课堂外声明并定义在课外?这对我来说没有多大意义。 – 2011-02-16 17:37:29
@Felix Dombek:我认为原因是这个类是(/可以)为你编译和链接的每个源文件声明的,但实际变量只能定义一次。这就是你需要明确声明为`extern`在其他源文件中定义的变量的原因。 – peoro 2011-02-16 17:40:54
@peoro:这似乎是合理的!但是为什么它允许使用整数数据类型呢?那也不应该被允许,然后... – 2011-02-16 17:56:09