声明类类型的数组(Borland C++有问题)



我有一个类,比方说

class XXX{
...
};

我想声明该类对象的全局数组,例如

XXX* arr = new XXX[50];

但是,例如,我在xxx.h文件(类的头文件)中声明:

extern XXX* arr;

并且在xxx.cpp文件中我做:

XXX* arr = new XXX[50];

但是,Borland C++给出了以下错误:

找不到用于初始化类型为"XXX"的数组元素的默认构造函数

当我刚刚在xxx.cpp文件中声明以下内容时

XXX*arr[50];

我在其他cpp文件(如)中收到一些错误消息

未定义的符号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元素的指针的全局数组。

找不到用于初始化类型为"XXX"的数组元素的默认构造函数

也就是说,你没有一个不接受任何参数的构造函数(即默认构造函数)。你在XXX课上定义过它吗?若您有接受任何参数的构造函数,那个么编译器不提供默认的构造函数。

XXX* arr = new XXX[50];

上面的语句调用默认构造函数50次。顺便说一句,请给一个有意义的类名。这有点冒犯。

当我刚刚在xxx.cpp文件中声明以下内容时

如果仅在.cpp文件中声明,则该变量仅对当前转换单元可见。您仍然需要在头文件中有extern声明,以便其他源对象文件能够链接到它。

找不到用于初始化类型的数组元素的默认构造函数'XXX'

您需要默认构造函数,因为您将使用它在以下位置创建类的默认实例:

XXX* arr = new XXX[50];

您可能已经实现了另一个构造函数,其中一些带有参数,这就是为什么编译器没有为您自动生成默认构造函数的原因。它可能看起来像这样:

class XXX{
public:
    XXX(){}
};

下一篇:

当我刚刚在xxx.cpp文件中声明以下内容时

XXX*arr[50];

我在其他cpp文件(如)中收到一些错误消息

未定义的符号arr;

您需要一个仍在标头中的extern声明来解析其他翻译单元中的符号。这就是C++03标准所说的:

程序的文本保存在称为源文件的单元中国际标准。包含所有标头的源文件(17.4.1.2)和通过预处理包含的源文件(16.2)指令#include,减去条件包含(16.1)预处理指令,称为翻译单位。[注意:C++程序不需要全部在同时。]

最新更新