感谢大家,因为帮助了我^^我的问题得到了解决!
当我使用C ++语言在内部类中使用Singleton时遇到问题。请帮帮我,抱歉我的英语不好。
class A: public AA
{
class InnerA
{
private:
static InnerA* _innerA;
public:
~InnerA();
void Release();
static InnerA* GetInstance()
{
if (_innerA == NULL)
{
static InnerA static_instance;
_innerA = &static_instance;
}
return _innerA ;
};
.....
控制台在编译后显示以下错误:
undefined reference to `A::InnerA::_innerA'
我也修改如下代码,但我仍然遇到上述错误。
class A: public AA
{
class InnerA
{
private:
static InnerA* _innerA;
public:
~InnerA();
void Release();
static InnerA* GetInstance()
{
if (A::InnerA::_innerA == NULL)
{
static A::InnerA::_innerA static_instance;
_A::InnerA::_innerA = &static_instance;
}
return A::InnerA::_innerA;
};
.....
请帮帮我!!!非常感谢
答案 0 :(得分:2)
类的所有静态数据成员必须在某处定义。将以下内容放入.cpp文件中:
A::InnerA *A::InnerA::_innerA;
但是,你真的需要那个静态指针吗?您可以像这样简化代码:
class A: public AA
{
class InnerA
{
public:
~InnerA();
void Release();
static InnerA* GetInstance()
{
static InnerA static_instance;
return &static_instance;
}
.....
然后,您不需要任何静态成员定义。
答案 1 :(得分:1)
首先要做的事情是:你正在混淆Singleton模式的两个不同的实现。
实施1
可靠的泄密单身人士。
// Singleton.hpp
class Singleton {
public:
static Singleton& Instance() {
if (I == nullptr) { I = new Singleton(); }
return *I;
}
private:
Singleton();
~Singleton();
static Singleton* I;
};
// Singleton.cpp
Singleton* Singleton::I = 0;
两个问题:
实施2
被称为迈耶斯的单身人士。
// Singleton.hpp
class Singleton {
public:
static Singleton& Instance() {
static Singleton S;
return S;
}
private:
Singleton();
~Singleton();
};
主要问题:
你应该选择其中之一,但不能混合两者。
答案 2 :(得分:0)
您必须在实现代码中声明变量,而不仅仅是在标题中。
答案 3 :(得分:0)
您始终定义静态数据成员。把它放在main之前,就在你的class A
定义下:
A::InnerA *A::InnerA::_innerA;
答案 4 :(得分:0)
在您的A类实现文件中,您必须编写类似\
的内容A::InnerA *A::InnerA::_innerA;
完成成员的定义。在标题中,您只声明该成员,但您没有定义它。