如何在循环中访问向量

时间:2017-01-13 10:32:42

标签: c++ object vector

我正在编写太空入侵者克隆,我正在努力创造子弹  每当我点击Space时,一个子弹应该被添加到向量中然后我想通过循环移动它们,但我不明白如何以正确的方式创建和处理它。

vector<Bullet> bullets(MAXBULLETS);
int bulletcounter = 0;
while (1) {
    Sleep(10);
    for (int i = 0; i < sizeof(bullets)-1; i++) {
        bullets[i].Move(0, 1);
    }
    if (GetAsyncKeyState(VK_SPACE)) {
        Bullet *bullet = new Bullet();
        bullets[bulletcounter] = bullet;  // Here is the error
        bulletcounter++;
    }

2 个答案:

答案 0 :(得分:4)

bullets是一个包含Bullet类型对象的向量。

Bullet *bullet = new Bullet();
bullets[bulletcounter] = bullet;  // Here is the error

此处bullet此类型为Bullet*。这两种不兼容的类型可以解决错误。

要解决此问题,请停止使用指针并仅实例化对象:

Bullet bullet;

这会使用无参数构造函数创建一个Bullet对象,然后您可以将其添加到bullets

请注意,由于您初始化向量并为其指定预定义大小bullets(MAXBULLETS),因此目前无效,这已为您创建MAXBULLETS默认构造对象,随时可用:

  

使用计数默认插入的T实例构造容器。   没有制作副本。

旁注:完全停止使用new;这不是Java或C#。如果需要动态分配的对象,则使用智能指针。但是,大多数情况下,对象自动存储持续时间会很好。

答案 1 :(得分:0)

我的建议

vector<Bullet> bullets;

while (1)
{
    Sleep(10);
    for (int i = 0; i < bullets.size(); i++)
    {
         bullets[i].Move(0, 1);
    }

    if (GetAsyncKeyState(VK_SPACE))
    {
       bullets.push_back(Bullet());            
    }