首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矢量阵列擦除不工作

矢量阵列擦除不工作
EN

Stack Overflow用户
提问于 2014-06-18 10:37:55
回答 2查看 285关注 0票数 0

我的vector.erase()函数给出了一个错误-> "error C2582:'operator =‘函数在'Fire’中不可用

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

任何帮助都是非常感谢的。

代码语言:javascript
运行
复制
//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
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-18 20:18:32

我认为您的基本问题是,您试图设计一个单独的类,它执行两种不同的操作:

  • 包含一个火灾向量
  • 实现火灾的行为

一个更好的设计是有两个独立的类。

1实现火灾行为的类

2一个类,它包含一个火灾向量,并实现方法,如update,以迭代该向量中包含的火,调用fire方法。

看起来是这样的:

代码语言:javascript
运行
复制
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类的成员,而应该是一个免费的函数。

票数 0
EN

Stack Overflow用户

发布于 2014-06-18 19:33:54

您的Fire类没有赋值运算符,或者是不可访问的。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24283410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档