12

関数が静的であることは非常に重要です。後で出力するには、別の静的/非静的クラス メンバーにアクセスして変更する必要があります。どうやってやるの?

フロー

  • クラスが開始されます
  • コンストラクターは、静的でなければならない内部関数を使用して変数を何かに設定します
  • しばらくして、その変数を出力します

サンプルコード

#include <iostream>

class MyClass
{
public:
    static int s;
    static void set()
    {
        MyClass::s = 5;
    }

    int get()
    {
        return MyClass::s;
    }

    MyClass()
    {
        this->set();
    }
};

void main()
{
    auto a = new MyClass();

    a->set(); // Error

    std::cout << a->get() << std::endl; // Error

    system("pause");
}

エラー

LNK2001: unresolved external symbol "public: static int MyClass::s" (?s@MyClass@@2HA)
LNK1120: 1 unresolved externals
4

1 に答える 1

17

静的変数を宣言しましたが、定義していません。

含まれているオブジェクトが作成および破棄されると、非静的メンバー変数が作成および破棄されます。

ただし、静的メンバーは、オブジェクトの作成とは別に作成する必要があります。

次のコードを追加して int を作成しますMyClass::s

int MyClass::s;

補遺:

C++17 はインライン変数を追加し、小さな変更でコードを操作できるようにします。

static inline int s;  // You can also assign it an initial value here
       ^^^^^^
于 2013-02-15T18:40:37.070 に答える