【发布时间】:2017-06-02 10:18:41
【问题描述】:
所以我目前正在为我的学校项目实现一个设计模式,其中包含类模型:
class Model {
...
private:
biosim::CreatureList list;
public:
biosim::CreatureList getList() const;
void setList(const biosim::CreatureList& list);
};
生物列表:
typedef std::vector<CreatureType> CreatureList;
我想在这个类中设置一个包含我的 Creatures 的向量,以便稍后在 Presenter-Class 中访问它。
首先,我试过了:
void Model::setList(const biosim::CreatureList& list) { this->list=list; }
但它给了我以下错误:
'biosim::CreatureType &biosim::CreatureType::operator =(const biosim::CreatureType &)': attempting to reference a deleted function
我用谷歌搜索后发现有人说我应该尝试的帖子
void Model::setList(const biosim::CreatureList& list) { this->list=std::move(list); }
但它给了我同样的错误。
现在我通过使用编译它
void Model::setList(const biosim::CreatureList& list) { this->list.assign(list.begin(), list.end()); }
但我不确定这是否是一个好的解决方案。 有人可以向我解释一下,为什么上面的行会导致错误而最后一个行得通?更重要的是:最好的方法是什么?
对不起,如果我的英语很烂,那不是我的母语。
【问题讨论】:
-
biosom::CreatureList是什么?如果它不能被复制,那么你不能复制它,可能你不应该复制它 -
另外,在
const引用上使用std::move显然是错误的。 -
您发布的错误消息表明
biosim::CreatureType不可复制分配。它有不可复制的成员吗?