2013-10-20 174 views
1
#include <iostream> 
using namespace std; 

class Assn2 
{ 
    public: 
    static void set_numberofshape(); 
    static void increase_numberofshape(); 

    private:   
     static int numberofshape22; 
}; 

void Assn2::increase_numberofshape() 
{ 
    numberofshape22++; 
} 

void Assn2::set_numberofshape() 
{ 
    numberofshape22=0; 
} // there is a problem with my static function declaration 

int main() 
{ 
    Assn2::set_numberofshape(); 
} 

爲什麼我在編譯時遇到錯誤undefined reference to Assn2::numberofshape22對靜態變量和靜態方法的未定義參考

我想聲明一個靜態整數:numberofshape22和兩個方法。

方法1個增加numberofshapes22 1

方法2 INITIALISE numberofshape22 0

我在做什麼錯?

回答

4

你剛剛聲明瞭變量。您需要定義它:

int Assn2::numberofshape22; 
2

在類的成員列表中的靜態數據成員的聲明不是定義。

要尊重one Definition Rule必須定義一個static數據成員。在你的情況下,你只是宣佈它。

例子:

// in assn2.h 
class Assn2 
{ 
    // ... 
    private:   
     static int numberofshape22; // declaration 
}; 

// in assn2.cpp 

int Assn2::numberofshape22; // Definition 
+0

哇...感謝。 – Erutan409