未解析的外部符号,object 指针数组

Unresolved external symbol, array of object pointers

在我的代码中,我想创建一个 objects 的动态数组。直到运行时我才知道我要多少个objects,而数组的class有一个动态变量数组,所以我的objects可以是任意大小。因此,为了制作它们的数组,我想创建一个指针数组,因为指针的大小是固定的。然后,在运行时,当我知道我将存储多少 objects 时,我想 malloc 存储指针所需的内存。当我尝试 mallocing 时,除非我在 .cpp 文件的顶部定义数组,否则我会收到链接错误,即使它已经在 header .h 文件中声明,我不确定为什么这是必要的。

我的代码: Maintest.cpp

#include <iostream>

#include "class.h"

#include "Maintest.h"

//Class** Maintest::testArray = NULL; //uncommenting this line fixes the linking error

void Maintest::createMany(){
    testArray = (Class **) malloc(10 * sizeof(Class *));
}

int main(){
    printf("hello");
}

Maintest.h

class Maintest {
private:
    static Class** testArray;
public:
    static void createMany();
};

class.cpp

#include <iostream>

#include "class.h"

Class::Class(int arg){
    test = arg;
}

class.h

class Class {
private:
    int test;
public: 
    Class::Class(int);
};

在过去,在 class 中 声明 一个 static 变量是不够的;您必须在同一个源文件中 定义 它。这就是为什么取消注释该行可以修复您的链接器错误。

但是从 C++17 开始,您可以通过在 class 定义中将变量声明为 static inline 来解决这个问题:

class Maintest {
private:
    static inline Class** testArray;
public:
    static void createMany();
};