所以我正在为我的学校项目实现一个设计模式,它包含类Model:
class Model {
...
private:
biosim::CreatureList list;
public:
biosim::CreatureList getList() const;
void setList(const biosim::CreatureList& list);
};
CreatureList:
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
我用Google搜索后发现有人说我应该尝试
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()); }
但我不确定,如果这是一个很好的解决方案。 有人可以向我解释,为什么上面的行导致错误而最后一行有效?更重要的是:最好的方法是什么?
对不起,如果我的英语很糟糕,那就不是我的母语了。
答案 0 :(得分:2)
如果您想存储,请按值进行存储:
void Model::setList(biosim::CreatureList list) {
this->list = std::move(list);
}
这会复制所有值,因此您需要提供一种复制CreatureType
的方法(这就是CreatureType::operator =(const biosim::CreatureType &)
错误的内容)。
话虽如此,如果您提供存储方式,为什么不将该会员公开?
Model m;
m.list = list;
答案 1 :(得分:2)
问题是,似乎CreatureType类型的元素不是trivially copyable.所以你应该实现一个复制/移动构造函数,以便能够复制/移动向量中包含的数据(比你可以复制/移动向量,因为vector实现了移动语义):
if (!File.Exists(path)) // append only if file doesnt exist
{
using (StreamWriter sw = File.AppendText(path))
{
for (ctrl = 0; ctrl < 5 ; ctrl++)
{
sw.WriteLine(OrigProductItems[ctrl] + "\t" + OrigProductQty[ctrl] + "\t\t" + OrigProductPrice[ctrl]);
}
}
}