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

时间:2013-08-10 22:20:20

标签: c++ class 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元素的全局指针数组。

2 个答案:

答案 0 :(得分:1)

  

无法找到默认构造函数来初始化“XXX”类型的数组元素

意味着,您没有不带任何参数的构造函数(即默认构造函数)。你在XXX课程中定义了吗?如果你有构造函数接受任何参数,那么编译器不提供默认构造函数。

XXX* arr = new XXX[50];

上述语句调用默认构造函数50次。顺便说一下,请给出一个有意义的班级名称。这有点令人反感。

  

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

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

答案 1 :(得分:0)

  

找不到默认构造函数来初始化类型的数组元素   '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)预处理指令,称为a   翻译单位。 [注意:一个C ++程序不需要全部翻译   同一时间。 ]