2013-12-15 141 views
0

在這段代碼中,我不知道編譯器爲什麼不讓我將值0賦值給變量x。我突出了導致問題的線。給靜態變量賦值時出錯

class List{ 
private: 
    int p; 
public: 
    static int x; 
    void total(); 
}; 

void List::total(List *a){ 
    x + = a -> p; 
    cout<<x; 
    getch(); 
    x=0; // problem here 
} 

我也注意到,如果我在函數體前寫INT表::總和= 0,程序工作得很好。我只是不明白爲什麼。 我感謝任何幫助!

+0

_你有什麼錯誤? – SLaks

回答

0

您已經在類中聲明瞭靜態,但尚未爲其定義變量。

class List{ 
private: 
    int p; 
public: 
    static int x; // this is just a declaration 
    void total(); 
}; 

您需要定義它,通常在相關的CPP文件:

List::x = 0;  // define variable and initialise 

報價from here

9.4.2靜態數據成員
的聲明其類定義中的靜態數據成員是 不是定義,可能是不完整的類型ot她比 cv-qualified void。靜態數據成員 的定義應出現在包含成員類 定義的名稱空間範圍內。在名稱空間範圍的定義中,靜態數據成員的名稱應使用:: 運算符通過其類名進行限定。靜態數據成員定義中的初始化表達式在其類 (basic.scope.class)的範圍內。

+0

非常感謝,現在它是有道理的。它對理解靜態變量有很大的幫助! – Flaviola

0

運營商+=試圖增加值x。在使用之前,您需要初始化x