いくつかのこと。
例:
//Foo.H
#ifndef __FOO_H__
#define __FOO_H__
...
...
#endif
- Bar.H は、Foo の実装に関する知識を必要とするコンストラクターを実装する場合、Foo.H を含める必要があります。(あなたは)
- 静的メンバーは、グローバルスコープで初期化する必要はなく、一度だけ定義する必要があります。
他の回答の状態にもかかわらず、メインはこれを行うには恐ろしい場所です。これを行うには、このクラスを使用するすべての人がメインでこれを行うことを知っている必要があります。あなたのヘッダー (またはあなたのチームの別の開発者やコードの別のブロック) を使用したいときに、メインで静的定数を定義する方法をどうやって知ることができますか? 答えは、私はしません。それは悪い習慣を形成する怠惰な習慣です。そして、静的な初期化/破壊の楽しみを始めさせないでください。
Foo.H に入れることはできません。これを行うと、ヘッダーを含むすべてのコンパイル ユニットによる再定義によるリンカー エラーが発生するためです。
これを行うのにはるかに適した場所は、新しく作成された Foo.[c|.cxx|.cpp|.cc] (使用する接尾辞は何でも) です。メインは動く?はい、うまくいきます...今あなたのために。後で問題が発生しますか?おそらく。それは覚えておくべき良い形と解決策ですか?絶対違う。
ベストアンサー:
//Foo.C (NOT MAIN)
#include<Foo.h>
int Foo::m = 0;
また、私の答えは、コンストラクターでそれを使用する2番目のクラスとは何の関係もないことに注意してください。ポイントがあれば、コンストラクターやクラスメンバー関数とは関係がないため、質問のタイトルを編集します。メンバ関数/メソッドではなく、静的クラス メソッド/関数について話している。