我一直在努力解决这个问题,所以我希望有人可以帮助我。
我正在创建一个对象向量,我想访问此向量的元素但是当我将en元素推回向量并尝试访问它时,它不起作用。 谢谢你的回答。
vector<reserve> reserves;
reserve r;
r.addACoordinate(1.9);
r.addACoordinate(1.9);
r.getDim();
reserves.push_back(r);
cout << "size of reserves " << reserves.size() << endl;
for (vector<reserve>::iterator k = reserves.begin(); k != reserves.end(); ++k) {
k->getDim();
}
然后我创建一个带有2个坐标的储备并将其推入储备矢量。
$2 != /c21|c22/
但是迭代的输出是0,而不是2.我不明白为什么我没有访问保留r。
答案 0 :(得分:2)
显示的复制构造函数完全破坏了:
reserve::reserve(const reserve &w){
int i;
for(i=0; i<coordinates.size(); i++){
复制构造函数运行时,新构造的coordinates
类成员始终为空。它显然从一开始就没有任何内容,所以coordinates.size()
在这里总是为零。复制构造函数永远不会实际复制用于复制的元素,以及所谓的&#34;副本&#34;它总是有一个空的向量。将此更改为w.coordinates.size()
将导致内存损坏,除非您还使用push_back()
替换循环中的赋值。说到push_back
()......
reserves.push_back(r);
push_back()
尝试将r
复制到此处的向量中。这是它的工作。猜猜将要用这些来做什么?为什么,破碎的拷贝构造函数,当然。即使r
具有初始化的coordinates
向量,受损复制构造函数也会确保reserves
最终会得到一个带有完全空coordinates
向量的类实例。
你可以在这里彻底摆脱复制构造函数。它没有任何用处,默认的复制构造函数将正确地完成所有操作。
如果你需要为你的家庭作业手动实现一个复制构造函数,请正确地修复它push_back()
来自复制的类实例的值,或者手动复制类成员本身,无论你需要什么做好这份工作。