【发布时间】:2012-10-29 03:36:01
【问题描述】:
我有一个类,它有一个指向另一个类的静态指针,它是一个单例。我似乎遇到的问题是我无法从所述类的构造函数中设置指针。这是我当前的代码:
class B;
class A
{
public:
A();
~A();
};
class B
{
public:
B();
~B();
static A* a;
};
A::A() {
A* B::a = this;
}
现在,我似乎遇到的问题是我无法在“当前范围”中定义 B::a。另外,“this”指针只能用在“非静态成员函数”中。
我认为问题与在另一个类函数中定义静态类变量有关,但我不确定。
【问题讨论】:
-
所以你想要一个在类被实例化之前可以使用的静态成员,直到另一个类被实例化后才被定义?
-
你在问什么?我不确定你的意思。
-
由于
B::a是公共的(除了是静态的),你可以在A的构造函数中做B::a = this;。但效果将是 1)B::a在创建A的第一个实例之前不会被初始化,并且 2) 每次创建A的新实例时,B::a都会发生变化。你确定那是你想要的吗?这听起来非常不寻常。 -
A 是一个单例类,这意味着它只会被构造一次。它也将在程序开始时构建,因此在它之前几乎没有发生任何事情。
-
好的。如果
B::a在创建A的唯一实例的同一位置而不是从A的构造函数内部分配其值,我会发现它更直观,但这当然是可能的.您代码中的关键问题不是赋值B::a = this,而是它前面有A *,这使它成为声明,而不是赋值。
标签: c++ class variables static