2013-04-29 161 views
40

你好我得到未定義引用錯誤在下面的代碼:未定義引用靜態變量C++

class Helloworld{ 
    public: 
    static int x; 
    void foo(); 
}; 
void Helloworld::foo(){ 
    Helloworld::x = 10; 
}; 

我不想staticfoo()功能。如何在一個類的非static方法中訪問一個類的變量static

+4

這將是很好的接受一個答案。 – Geoff 2016-02-03 18:10:52

回答

62

我不想staticfoo()功能

好,foo()在你的類不靜態的,你做需要使其static以訪問static變量你的班級。

您需要做的僅僅是爲您的靜態成員變量提供定義

class Helloworld { 
    public: 
    static int x; 
    void foo(); 
}; 

int Helloworld::x = 0; // Or whatever is the most appropriate value 
         // for initializing x. Notice, that the 
         // initializer is not required: if absent, 
         // x will be zero-initialized. 

void Helloworld::foo() { 
    Helloworld::x = 10; 
}; 
+1

非常感謝。我正在實例化HelloWorld :: x而不是int。 再次感謝。 – 2013-04-29 17:35:02

+0

@Nevermore:不客氣,很高興它有幫助;) – 2013-04-29 17:40:33

+0

@AndyProwl我試過這個,並得到了一個編譯器錯誤,將x設置爲0.它說'類Helloworld'中的'foo'沒有命名一個類型。有什麼建議? – ufmike 2016-07-14 20:06:24

38

的代碼是正確的,但不完整。 Helloworld類別的聲明其靜態數據成員x,但該數據成員沒有定義。 Somehwere在源代碼中,你需要

int Helloworld::x; 

,或者,如果0是不是一個合適的初始值,添加一個初始值設定。