未解析的外部符号,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();
};
在我的代码中,我想创建一个 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();
};