#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进行比较吗?是否存在一些语法问题?
答案 0 :(得分:2)
你可能需要一个指针:
static boiler* uniqueInstance;
从那时起,您正在使用new
初始化它:
uniqueInstance = new boiler ();
编译器告诉你它无法将boiler
的实例与int(实际为long)进行比较。这种比较不存在。可以将指针与整数类型进行比较,从而可以将比较为0。
此处与NULL
的比较可用作检查指针是否已初始化的方法。如何使用实例执行此操作并不明显,没有无效或未初始化实例的概念。您可以通过定义相应的NULL
将对象与operator==
进行比较,但这种比较可能没有意义,因为NULL
通常只是0
的另一个名称。
答案 1 :(得分:1)
您将uniqueInstsance
声明为类实例:
static boiler uniqueInstance;
但有时将其视为指针:
uniqueInstance = new boiler ();
我认为您应该将其声明为指针,以便您可以动态分配实例:
static boiler* uniqueInstance;
您还需要更改getInstance()
以返回指针:
static boiler* getInstance() //...
最后确保在类声明之外的某处确实有uniqueInstance
的定义。在.cpp文件中的一个位置(不是标题):
boiler* boiler::uniqueInstance;