来自"duplicated from" question的解决方案是在类定义之后初始化指针,但我发现没有成功。尝试插入A B::AArray;
或A B::AArray = new A[10];
会给我带来多个错误,包括“冲突声明”和“无法通过非常量表达式初始化”。我似乎找不到在代码中的任何地方定义B :: AArray的方法。
class A{
public:
int Avar;
A(int Avar = 0){this->Avar = Avar;}
};
class B{
private:
static A *AArray;
public:
static void setAArray();
};
int main(){
return 0;
}
void B::setAArray(){
A *data;
data = new A[10];
AArray = data; // <- delete this line and the program complies
}
这段代码说我有一个未定义的引用'B :: AArray'并且不会编译。如果我想要一个指向B类中A类对象数组的静态指针,我该如何解决这个问题?
注意:我的班级目前不使用多个文件,一切都在一个.cc文件
下答案 0 :(得分:0)
鉴于前一个副本的内容,OP代码的更详细的工作样本如下。
定义需要在函数之外;
class B{
private:
static A *AArray;
public:
static void setAArray();
};
A* B::AArray = nullptr; // define and initialise with a suitable default
int main(){
return 0;
}
void B::setAArray(){
A *data;
data = new A[10];
AArray = data; // initialization...
}
AArray = data;
不是定义,而是初始化。