我注意到我的一些函數實際上並沒有訪問這個對象,所以我把它們做成了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