我有一个类,比方说
class XXX{
...
};
例如,我想声明该类对象的全局数组
XXX* arr = new XXX[50];
但是,例如,我在 xxx.h 文件(类的头文件)中声明:
extern XXX* arr;
在 xxx.cpp 文件中我这样做:
XXX* arr = new XXX[50];
但是,Borland C++ 给出了以下错误:
Cannot find default constructor to initialize array element of type 'XXX'
当我在 xxx.cpp 文件中声明以下内容时
XXX* arr[50];
我在其他 cpp 文件中收到一些错误消息,例如
Undefined symbol arr;
所以,总结一下,我该如何声明我的这个数组?
更新: 我有一个带有 3 个参数的构造函数,我不希望它们具有默认值。
此外,我在宏中“声明”了构造函数,如下所示:
#define PREP(num, c)\
IVT ivt##num(evInt##num,num,c);\
void interrupt evInt##num(...){\
iv[##num]->signalize();\
}
因此,IVT ivt##num(evInt##num,num,c);是类 IVT 的构造函数,我想声明一个包含 X 个元素的全局指针数组。
最佳答案
Cannot find default constructor to initialize array element of type 'XXX'
意思是,您没有不接受任何参数的构造函数(即默认构造函数)。您是否在 XXX 类中定义了它?如果构造函数接受任何参数,则编译器不会提供默认构造函数。
XXX* arr = new XXX[50];
上述语句调用默认构造函数 50 次。顺便说一句,请给一个有意义的类名。这有点冒犯。
When i just declare the following in xxx.cpp file
如果您单独在.cpp
文件中声明,则该变量仅对当前翻译单元可见。您仍然需要在头文件中有 extern 声明,以便其他源对象文件能够链接到它。
关于c++ - 声明类类型的数组(Borland C++ 有问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18166885/