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

标签 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

我已经尝试过我在谷歌上找到的其他方法,有些与此类似,有些则略有不同,但似乎对第一个数组没有任何作用。您能否向我解释一下我将如何有效地创建 2 个数组?另一件事,在第二个数组中,它将填充 Die 和 LoadedDie,我将如何调用每个类可用的函数,包括那些不是从基类 (Die) 继承的函数?

最佳答案

首先,你需要修正一个语法错误:与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) 当您完成对数组的处理后,对 regDieBag 的每个元素调用 delete 以避免内存泄漏。

关于c++ - 使用类对象和派生对象 C++ 创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026089/

相关文章:

c++ - 可关闭的 QTabWidget 选项卡,但不是全部

c++ - cpp hpp分离

c++ - 非常量引用只能绑定(bind)到左值

c++ - AST 的树模式匹配。 C++ 中有什么干净的方法吗?

php - 尝试创建大数组时的 PHP 问题

javascript - 我如何使用一个函数验证数组中的间隔

c - 如何制作未装箱的 float 组,我可以获取 Ptr

c++ - 带有抽象类的列表与 vector

class - 程序集中的结构或类

c++ - c++中Dijkstra的段错误