我正在尝试创建一个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)?
答案 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
,以避免内存泄漏。