2011-12-06 77 views
1

我不知道如何初始化一個靜態類成員而不創建這個類的對象。 這裏是我的代碼:C++初始化和修改一個靜態類成員

namespace { 

    class CPassant : public thread 
    { 
     private: 
      static unsigned LastID; 

     public: 
      CPassant (unsigned pDelaiArr = 0, unsigned pDelaiDep = 0) 
      { 
       (blabla) 
      } 

      static void setLastID (unsigned Valeur) 
      { 
       LastID = Valeur; 
        /* error : undefined reference to `(anonymous  
         namespace)::CPassant::LastID' */ 

      } // setLastID() 

     }; // class CPassant 

} // anonym namespace 

int main() 
{ 
    CPassant::CPassant().setLastID(0); 
    // doesn't work too: 
// unsigned CPassant::LastID = 0; 

    return 0; 
} 

感謝

注:我已經看過這些問題的答案,但他們沒有工作:

stackoverflow.com/ initialize-a-static-member-an-array-in-c

stackoverflow.com/ how-to-initialize-a-static-member

回答

4

待辦事項這在你的cpp文件中:

unsigned CPassant::LastID = 0; 

這被稱爲定義靜態類成員,如果你不這樣做,你將最終得到鏈接錯誤。你只是聲明瞭靜態成員,但沒有定義它。

請注意,在定義靜態成員時,訪問說明符並不重要。

+0

哦謝謝!我已經嘗試過,但是我在main()中寫了它。 它現在有效 – Carvallegro

+0

@Hahuha:你在名字空間中定義了它嗎? –

3

您已聲明但未定義靜態成員。你必須定義它。這裏有一種方法:

namespace { 
/* ... */  

    unsigned CPassant::LastID = 0; 

}; // anonym namespace 
0

你要做的

unsigned CPassant::LastID = 0; 在.cpp文件 ..

0

與LastID初始化的問題是,這是你聲明的名稱空間的外它。把它放在相同的命名空間,它會工作。