9

重複の可能性:
C++ での静的メンバーの定義

私は C++ で少し作業していますが、C++ で静的フィールドを使用する方法がわかりません。役に立たないようです。私を修正してください。

私はそんなことはできません:

class AClass{
    public:
        static int static_field = 0;
};

そして、それも機能しません

class AClass{
    public:
        static int static_field;
};

int main(){
    int AClass::static_field = 0;
    return 0;
}
4

4 に答える 4

16

実際、あなたは近くにいました。

移動する必要があります: int AClass::static_field = 0;外に移動main()して、CPP ファイル内でグローバルになるようにします。AClass.cpp.

このようにして、ヘッダーで宣言し、ソース ファイルで初期化します。この宣言/初期化を設定した後にmain()行うだけで、どこでも使用できます。AClass::static_field

PS: それらは絶対に役に立たないわけではありません。

良い使用例を次に示します... メモリ リークが発生しており、それらを追跡する必要があるとします。クラスに静的カウンターを配置すると、そのクラスのすべてのインスタンスがそれを共有します。次に、コンストラクター/デストラクタでそのカウンターをインクリメントおよびデクリメントします。そのため、カウンターを出力して、存在するクラスのインスタンス数を表示し、リークを見つけることができます。

于 2012-08-10T15:44:18.123 に答える
14

メイン関数のスコープ外で static_field を初期化する必要があります。

int AClass::static_field = 0;
int main(){
}
于 2012-08-10T15:46:50.017 に答える
6

これを試して:

class AClass{
    public:
        static int static_field;
};

int AClass::static_field = 0;

int main(){
    return 0;
}
于 2012-08-10T15:48:05.063 に答える
4

ここで静的変数を宣言しているときは、クラスのすべてのインスタンス間で共有されるこの変数の 1 つのインスタンスがあることを示しています。

提供された他のいくつかの回答のように、メイン関数の外に宣言を移動することが正しい解決策です。

static キーワードに関する msdn のドキュメントを次に示します。

http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx

お役に立てれば

于 2012-08-10T15:53:34.697 に答える