2012-03-30 75 views
1

我有A級,使得:使用C++類的靜態變量在多個文件

class A { 
    static int i; 
    A(); 
    f1(); 
    f2(); 
    static void intitiaize(); 
    // snipped rest 
} 

void initialize() { 
    A::i = 0; 
} 
在頭文件

我有一個初始化第二個文件main方法中的 靜態變量的類的初始化函數。在此之後,我創建了 A的對象以致電a.f1()

當我嘗試在文件3中創建A的另一個對象時,編譯器會抱怨 說「沒有對類A的引用」。所以在第三個文件中包含了頭文件。

我收到有關A的多個定義的錯誤。

我該如何繼續?我已經在班級文件中加入了警衛。

+0

我已經加入發起的INT A ::我= 0類..just的最終錯過了它在這裏 – 2012-03-30 09:36:59

回答

2

你想要的A::i在頭一個聲明(你可以擺脫你的initialize()的:

//whatever.h: 
class A{ 
    static int i; 
    A(); 
    f1(); 
    f2(); 
    ... 
}; // don't forget the semicolon on the end. 

然後,你需要在一個CPP文件中的變量的定義:

// whatever.cpp: 
int A::i = 0; 

然後在你要使用類的對象的地方包含標題,然後編譯.CPP文件並將它與其他使用此類的其他程序鏈接起來。

+0

感謝..又發現一個錯誤ñ我的代碼..和愚蠢的事情,我必須做的是給函數defn在頭文件..這再次造成問題,因爲相同的defn被包括在兩個c文件中。 – 2012-03-30 09:53:37

0

使用const整數可以實際在標題中初始化它。這包括bool和char類型。傑裏的方法將適用於任何類型,如果它不是常量。

class A{ 
     static const int i = 0; 
     ... 
    } 
+0

你是對的,相應地改變它。這[問題](http://stackoverflow.com/questions/185844/initializing-private-static-members)給出了關於這個問題的更多細節。 – kossmoboleat 2012-03-30 16:13:50