2011-12-06 10 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; 
} 

おかげ

NB:私はすでに、これらの答えを見てきましたが、それらのどれも働いた:

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

あなたが.cppファイルに

unsigned CPassant::LastID = 0; をしなければならない。..

0

LastIDのあなたの初期化に問題が、それはあなたが宣言された名前空間の外にあるということですそれ。それを同じ名前空間に入れるとうまくいきます。

関連する問題