2016-10-11 27 views
0

私はクラスを持っています、それはFoo Foo私はヘッダーのクラスに次の行を含めるときにコンパイルされません。C++静的クラスと非静的クラスのメンバ

static std::vector<UnvalidatedSocket*> unvalidatedSockets; 

とcppの次の行。

  Foo::unvalidatedSockets.push_back(new UnvalidatedSocket(ClientSocket)); 

staticキーワードを取り除くと、うまくコンパイルされます。 循環インクルードを確認しましたが、何もありません。

エラーがLNK2001, unresolved external symbol

これはなぜ起こるのでしょうか? 静的クラスメンバーは早めに含まれますか?

+1

静的メンバーを宣言するだけでなく、宣言する必要があります。あなたのcppファイルに 'std :: vector Foo :: unvalidatedSocket;'を追加してください。 – Quest

+1

あなたがどんなエラーを出しているのか誰にも言わないでください。それは人々が推測するのがはるかに興味深いでしょう... – Slava

+0

ダーニット..私は本当にあなたがC++での宣言を二重にしなければならないのが大好きです。 (まあ、実際には宣言しません。)javadevelopperが学ぶことができるものがまだあると思われます。 – blipman17

答えて

1

静的メンバーをCPPファイルのどこかにプッシュしようとする前に、そのメンバーを初期化する必要があります。このようなものを追加してください:

std::vector<UnvalidatedSocket*> Foo::unvalidatedSockets; 
+0

これをコンパイルしようとしましたか? – Slava

+0

'= std :: vector()'の必要はなく、デフォルトで自動的に構築されます。それが不完全であるという事実を気にしないでください。 –

+0

@SlavaもちろんOPのコードはありませんので、コンパイルするのには何もありません。構文がオフの場合は、修正することができます。 – Brick

関連する問題