未定义的引用:尝试初始化来自不同类的对象的指针数组

时间:2017-01-23 11:50:07

标签: c++ arrays pointers undefined-reference

来自"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文件

1 个答案:

答案 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;不是定义,而是初始化。

Sample listing