0

仮想マシン VmPlayer で QNX momemtics IDE 5.0.1 を使用して、QNX クライアントを実行しています。クラスにシングルトンパターンを使用しています。クラスのインスタンスを呼び出すと、「「エラーへの未定義の参照: 非整数型 [-fpermissive] の静的データ メンバー 'DemoClass* DemoClass::s_instance' のクラス内初期化に 'constexpr' が必要です」というエラーが表示されます。コード スニペットは次のとおりです。

class DemoClass
{
   static DemoClass*s_instance = nullptr;
   public :
        DemoClass();
    virtual ~DemoClass();

    //singleton 
    static DemoClass* GetInstance()
    {
        if (!s_instance)
          s_instance = new DemoClass;
        return s_instance;
    }

}

以下のように、別のクラスでゲッター関数を呼び出しています。

class AppMgr
{
DemoClass* m_demo;

public:
    AppMgr();
    virtual ~AppMgr();
    void Load();
);

void AppMgr::Load()
{
   m_demo = = DemoClass::GetInstance();
}

エラーに直面している静的メンバーの定義を追加しました。提案してください。

4

2 に答える 2

2

サンプルが機能しないいくつかの構文エラーに加えて、s_instance静的であるため、クラスの外部で宣言する必要があります。

class DemoClass
{
    static DemoClass* s_instance;

public :
    DemoClass();
    virtual ~DemoClass();

    //singleton 
    static DemoClass* GetInstance()
    {
        if (!s_instance)
        s_instance = new DemoClass;
        return s_instance;
    }

};

DemoClass* DemoClass::s_instance = nullptr;

これにより、言及されたエラーが修正されm_demo = = DemoClass::GetInstance();、コンストラクタ/デストラクタの定義など、さらに修正する必要があります。

于 2016-08-16T07:23:18.503 に答える
1

クラスに静的フィールドがある場合、それが整数型の const またはconstexpr. s_instanceどちらでもないので、宣言と定義を分ける必要があります。s_instanceC++ ファイルの 1 つで、クラスのスコープ外で定義する必要があります。

DemoClass.h:

class DemoClass
{
    static DemoClass* s_instance;
}

DemoClass.C:

DemoClass *DemoClass::s_instance = nullptr;
于 2016-08-16T07:52:02.097 に答える