矢量阵列擦除不工作

时间:2014-06-18 10:37:55

标签: c++ arrays vector erase

我的vector.erase()函数给出了一个错误 - > “错误C2582:'运营商='功能在'火'中无法使用

这里是代码,矢量在头文件中声明。

感谢任何帮助。

//header
std::vector<Fire> _fires;

//cpp
void Fire::update()
{
    for (unsigned int i = 0; i < _fires.size(); i++)
    {

    _fires[i].lifeTimer(); // updates the lifetime for all objects

        if (_fires[i]._lifetime >= 200)
        {
            _fires.erase(_fires.begin() + i); //erase not working
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您的Fire班级没有分配操作员,或者无法访问。

但是vector::erase()实现必须需要它,因为正如http://www.cplusplus.com/reference/vector/vector/erase/指出的那样,擦除元素可能会导致元素重新定位。

答案 1 :(得分:0)

我认为你的基本问题是你试图设计一个可以做两件事的单一类:

  • 包含火焰矢量
  • 实施火灾行为

更好的设计是有两个单独的类

1实现火灾行为的类

2一个包含一个fire的向量的类,并实现一些方法,比如update,迭代向量中包含的fires,调用fire方法。

看起来像这样:

class Fire {
  // implements individual method on an instance of fire, such as  liefetime
};

class FireContainer {
  // implements method to deal with all the fires, such as update
  std:: vector< Fire > myFires;

};

但是,如果你想继续使用单个类,并将fire of vector作为全局(通常被认为是不好的做法),那么方法更新不应该是Fire类的成员,而应该是一个自由函数。