【发布时间】:2020-10-26 16:48:21
【问题描述】:
在我的代码中,我想创建一个动态对象数组。直到运行时我才知道我想要多少个对象,并且数组的类有一个动态变量数组,所以我的对象可以是任意大小。因此,要制作它们的数组,我想创建一个指针数组,因为指针的大小是固定的。然后,在运行时,当我知道要存储多少对象时,我想分配存储指针所需的内存。当我尝试 mallocing 时,我得到一个链接错误,除非我在 .cpp 文件的顶部定义数组,即使它已经在头 .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;
}
类.h
class Class {
private:
int test;
public:
Class::Class(int);
};
【问题讨论】:
-
这能回答你的问题吗? Undefined reference to static class member
-
这是C++的规则,你自己也说了。您需要一个声明(在这种情况下在头文件中)和一个定义(在这种情况下在 C++ 文件的顶部)。在某些情况下,相同的代码可以是声明和定义,但这不是其中一种情况。另外,为什么在 C++ 程序中使用 malloc?您尝试创建自己的动态数组已经够糟糕了(
std::vector有什么问题?)但至少使用new而不是 malloc。 -
请看std::vector。
-
在
Class声明中Class::Class(int);应该是Class(int); -
@john 所以为了做到这一点,我不能为头文件中声明的数组分配内存,除非我在 .cpp 文件中用任何值(包括 null)定义它?