在另一个类中定义静态类指针

时间:2012-10-29 03:36:02

标签: c++ class variables static

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

class B;

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


class B
{
  public:

    B();
    ~B();

    static A* a;
};

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

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

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

2 个答案:

答案 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。