我有一个类,它有一个指向另一个类的静态指针,它是一个单例。我似乎遇到的问题是我无法在所述类的构造函数中设置指针。这是我目前的代码:
class B;
class A
{
public:
A();
~A();
};
class B
{
public:
B();
~B();
static A* a;
};
A::A() {
A* B::a = this;
}
现在,我似乎得到的问题是我无法在“当前范围”中定义B :: a。另外,“this”指针只能用于“非静态成员函数”。
我认为问题与在另一个类函数中定义静态类变量有关,但我不确定。
答案 0 :(得分:2)
首先,必须定义静态类成员以及声明。 B类主体中的static A* a;
仅仅是一个声明,你需要定义 a。请注意,每个类成员必须具有单个定义,这就是我们通常在类的相应.cpp
文件中定义静态成员的原因。显然,这发生在课堂之外。您也无法在函数范围内定义静态成员。
因此,移动构造函数范围之外的定义,如下所示:
class B
{
public:
B();
~B();
static A* a;};
A* B::a = 0; // Good idea to set a default value for the pointer
但请注意,a
的值将包含0,直到创建至少一个类型为A的对象。
答案 1 :(得分:0)
您应该在类声明之外定义所有静态成员:
class B;
class A
{
public:
A();
~A();
};
class B
{
public:
B();
~B();
static A* a;
};
A* B::a; // HERE
A::A()
{
B::a = this; // and there was an error here too
}
不要忘记定义其他ctors / dtors。