3

我有一个类,它有一个指向另一个类的静态指针,它是一个单例。我似乎遇到的问题是我无法从所述类的构造函数中设置指针。这是我当前的代码:

class B;

class A
{
  public:
    A();
    ~A();
};


class B
{
  public:

    B();
    ~B();

    static A* a;
};

A::A() {
  A* B::a = this;
}

现在,我似乎遇到的问题是我无法在“当前范围”中定义 B::a 。此外,“this”指针只能用在“非静态成员函数”中。

我认为问题与在另一个类函数中定义静态类变量有关,但我不确定。

4

2 回答 2

3

首先,必须定义和声明静态类成员。static A* a;在B类的主体中只是一个声明,你需要定义一个。请注意,每个类成员都必须有一个定义,这就是我们通常在.cpp类的适当文件中定义静态成员的原因。显然,这发生在类体之外。您也不能在函数范围内定义静态成员。

因此,将 a 的定义移到构造函数的范围之外,如下所示:

class B
{
public:

    B();
    ~B();

    static A* a;};

A* B::a = 0; // Good idea to set a default value for the pointer

但是请注意,a在创建至少一个 A 类型的对象之前, 的值将包含 0。

于 2012-10-29T03:45:05.150 回答
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。

于 2012-10-29T03:40:46.187 回答