我看到像
这样的错误src / singleton.cxx:16:错误:无效使用成员' Singleton :: instance'在静态成员函数中 src / singleton.cxx:28:错误:从这个位置 src / singleton.cxx:16:错误:无效使用成员' Singleton :: instance'在静态成员函数中 src / singleton.cxx:29:错误:从这个位置 src / singleton.cxx:16:错误:无效使用成员' Singleton :: instance'在静态成员函数中 src / singleton.cxx:31:错误:从这个位置 src / singleton.cxx:在函数' int main()':
现在进行更改后,我收到以下错误
singleton-rhel6.3.o:在函数Singleton::get_instance()':
src/singleton.cxx:27: undefined reference to
Singleton :: instance'
#include <cstddef>
class Singleton {
private:
Singleton();
static Singleton * instance;
int m_num;
int incr_call();
public :
static Singleton * get_instance();
};
Singleton * Singleton::get_instance() {
if(instance == NULL)
instance = new Singleton();
return instance;
}
Singleton::Singleton():
m_num(0)
{
}
int Singleton::incr_call() {
return m_num++;
}
int main() {
Singleton * s = Singleton::get_instance();
return 0;
}
答案 0 :(得分:1)
instance
应为static
,因为您希望能够在get_instance
中调用它。此外,instance
应为private
:
class Singleton {
public :
static Singleton * get_instance();
private:
Singleton();
static Singleton * instance;
int m_num;
int incr_call();
};
Singleton* Singleton::instance;
您也应该更改构造函数,以便不初始化instance
:
Singleton::Singleton():
m_num(0)
{ }
由于instance
为static
,因此默认初始化已完成,它将为NULL / nullptr
。
答案 1 :(得分:1)
如果你必须使用单身,请使用Meyers&#39;之一:
class Singleton {
private:
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public :
static Singleton& get_instance()
{
static Singleton instance;
return instance;
}
// Extra stuff
};