0
#include <iostream>
using namespace std;

class boiler
{
private:
    static boiler uniqueInstance;

    bool boilerEmpty;
    bool mixtureBoiled;

    boiler()
    {
        boilerEmpty = true;
        mixtureBoiled = false;
    }

public:
    static boiler getInstance()
    {
        if(uniqueInstance == NULL)
        {
            uniqueInstance = new boiler();
        }

        return uniqueInstance;
    }
};

上記のコードは、タイトルに記載されているエラーを返します。

anisha@linux-y3pi:~> g++ -Wall test.cpp
test.cpp: In static member function ‘static boiler boiler::getInstance()’:
test.cpp:22:26: error: no match for ‘operator==’ in ‘boiler::uniqueInstance == 0l’
test.cpp:24:34: error: no match for ‘operator=’ in ‘boiler::uniqueInstance = (operator new(2u), (<statement>, ((boiler*)<anonymous>)))’
test.cpp:5:1: note: candidate is: boiler& boiler::operator=(const boiler&)

なぜ?「オブジェクト」を NULL と比較することはできませんか? 構文上の問題はありますか?

4

2 に答える 2

2

おそらくポインタが必要です:

static boiler* uniqueInstance;

それ以来、newここで初期化しています:

uniqueInstance = new boiler ();

boilerコンパイラは、のインスタンスをint (実際には long) と比較できないことを示しています。この比較は存在しません。ポインターは整数型と比較できるため、0 との比較が可能です。

ここで、 との比較NULLは、ポインターが既に初期化されているかどうかを確認する手段として機能します。インスタンスでこれを行う方法は明らかではありません。無効または初期化されていないインスタンスの概念はありません。NULL適切な を定義することでオブジェクトを と比較できますが、は の別の名前であることが多いoperator==ため、この比較は意味をなさない場合があります。NULL0

于 2012-05-04T06:06:32.590 に答える
1

uniqueInstsanceクラス インスタンスとして宣言します。

 static boiler uniqueInstance;

ただし、ポインターとして扱う場合もあります。

uniqueInstance = new boiler ();

インスタンスを動的に割り当てることができるように、ポインターとして宣言する必要があると思います。

static boiler* uniqueInstance;

getInstance()ポインターを返すように変更することもできます。

static boiler* getInstance() //...

uniqueInstance最後に、実際にクラス宣言の外のどこかに定義があることを確認してください。.cpp ファイル (ヘッダーではない) の 1 つの場所:

boiler* boiler::uniqueInstance;
于 2012-05-04T06:07:39.820 に答える