使用类对象和派生的对象C ++创建数组

时间:2014-11-19 20:11:08

标签: c++ arrays class derived-class

我正在尝试创建一个2个数组,regDiceBag包含10个我的基类对象Die,另一个包含5个基类和5个派生类对象LoadedDie。我不知道如何创建第二个数组,但是,根据过去的经验,第一个数组应该像这样初始化:Die[] regDieBag[10];然后当我想用一个for中的Die对象填充它时循环,我会做regDieBag[i] = new Die(6);。嗯,这就是我应该工作的方式,但是当我编译程序时出现了这个错误:

DieTester.cpp: In function ‘int main()’:
DieTester.cpp:33: error: expected unqualified-id before ‘[’ token
DieTester.cpp:35: error: ‘regDieBag’ was not declared in this scope

我尝试过在google上找到的其他方法,有些类似于此,有些有点不同,但似乎没有任何方法可用于第一个数组。你可以向我解释一下如何有效地创建2个阵列吗?另外,在第二个数组中,它将填充Die和LoadedDie,我如何调用每个类可用的函数,包括那些不是从基类继承的函数(Die)?

1 个答案:

答案 0 :(得分:2)

首先,您需要修复语法错误:与Java或C#不同,其中数组类型由类型名称后面的一对空方括号表示,C ++“理解”变量名称后的方括号更改类型变量为数组类型。

Die[] regDieBag[10];
// ^^ This syntax is incorrect

现在,当你看到这些线条时

Die regDieBag[10];
//  ^ No asterisk

regDieBag[i] = new Die(6);
//             ^^^ Using operator new

你应该怀疑:new产生一个指针,你试图将它分配给一个非指针数组!

按如下所示更改声明以解决此问题:

Die *regDieBag[10];

由于您使用的是Die及其子类型LoadedDie的动态分配对象,因此您需要(1)确保Die声明虚拟析构函数,以及(2)调用完成数组后,delete的每个元素都regDieBag,以避免内存泄漏。