【问题标题】:Dynamically allocated array - class object动态分配的数组 - 类对象
【发布时间】:2021-03-17 15:38:44
【问题描述】:

我正在尝试动态分配对象数组。我的项目中有一个类 Enemy,我想创建 5 个敌人。经过筋疲力尽的研究,我无法为我的问题找到答案。

Enemy* mainEnemy = new Enemy(enemyShip)[5];

有一个错误:不存在从 Enemy 到 Enemy* 的合适转换。

当我删除指针时,这一行没有错误:

 Enemy mainEnemy = new Enemy(enemyShip)[5];

但是如何处理这样创建的对象呢?我不能这样设置单个对象的位置:

mainEnemy[0]->StartingPosition(); // no operator "[]" matches these operands . operand types are: Enemy[int]

【问题讨论】:

  • 什么是enemyShip?你想用new Enemy(enemyShip)[5]; 完成什么?分配一个由 5 个敌人组成的数组,所有这些敌人都是从 enemyShip? 构造的
  • enemyShip 是一个船级实例。船*敌人船=新船(&enemyT);类 ship 将敌人纹理作为参数,类敌人将指向船的指针作为参数。我只想动态分配 5 个敌人,对它们进行操作(绘图、设置位置等。我正在尝试用这些对象创建一个数组。
  • 我正在尝试动态分配对象数组。 -- std::vector<Enemy> mainEnemy(5, enemyShip);
  • 您需要发布minimal reproducible example。首先,&enemyT 是可疑的,因为我们不知道这个enemyT 对象是在何时何地创建的或其生命周期。不用说,存储任何东西的地址意味着您需要确保在您访问该地址期间,您存储的任何地址都不能超出范围。

标签: c++ arrays dynamic sfml allocation


【解决方案1】:

建议:考虑使用向量。

const size_t NUM_ENEMIES{ 5 };
std::vector<Enemy*> enemies(NUM_ENEMIES, new Enemy(enemyShip));

你的问题:如果你想动态创建一个包含 5 个敌人的数组。

const size_t NUM_ENEMIES{ 5 };
Enemy* enemies[NUM_ENEMIES]{};
for( int x=0; x < NUM_ENEMIES; ++x )
{
    enemies[x] = new Enemy(enemyShip);
}

【讨论】:

  • 您的两个代码 sn-ps 没有达到相同的结果。在第一种情况下,有五个指针,但只有一个 Enemy。在第二个有五个指针和五个敌人。在没有任何其他信息的情况下,最好的答案是根本不使用任何指针std::vector&lt;Enemy&gt; enemies(NUM_ENEMIES, enemyShip);
猜你喜欢
  • 2010-09-20
  • 1970-01-01
  • 2013-02-02
  • 2012-05-04
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多