web-dev-qa-db-ja.com

C ++パブリック静的メソッドからプライベート静的メンバーにアクセスしますか?

パブリック静的メソッドとプライベート静的メンバー/変数を持つ単純なクラスを含む.hppファイルがあるとします。これはサンプルクラスです:

class MyClass
{
public:
    static int DoSomethingWithTheVar()
    {
        TheVar = 10;
        return TheVar;
    }
private:
    static int TheVar;
}

そして私が電話すると:

int Result = MyClass::DoSomethingWithTheVar();

「結果」は10になると思います。

代わりに私は(10行目で)得ます:

undefined reference to `MyClass::TheVar'

10行目は「TheVar = 10;」です。メソッドから。

私の質問は、静的メソッド(DoSomethingWithTheVar)からプライベート静的メンバー(TheVar)にアクセスできるかどうかです。

20

あなたの質問への回答はイエスです!静的メンバーTheVarの定義に失敗しました:

int MyClass::TheVar = 0;

Cppファイル内。

1つの定義ルール を尊重することです。

例:

// Myclass.h
class MyClass
{
public:
    static int DoSomethingWithTheVar()
    {
        TheVar = 10;
        return TheVar;
    }
private:
    static int TheVar;
};

// Myclass.cpp
#include "Myclass.h"

int MyClass::TheVar = 0;
23