当对象包含其他对象的向量时,无法设置值
Cannot set a value when an object contains Vector of another objects
我已经实现了一个包含以下类的C 程序:
class Wheels{
private:
bool _needToChange;
public:
void SetNeedToChange (const bool needToChange) {_needToChange = needToChange;}
};
class Car {
private:
vector<Wheels> _wheels;
public:
vector<Wheels> GetWheels() {return _wheels;}
};
在主我创建汽车向量:
int main(){
vector<Car>_cars;
//Inside two nested for loops I need to set the boolean value
_cars[iter1].GetWheels()[iter2].SetNeedToChange(true);
}
但是,此之后的值总是是错误的。我在做什么错?
几个答案告诉您使返回的向量成为参考。当然,这有效,但这会损害您的封装。一个人可以很容易地做诸如getWheels()。调整大小(0);,这不应从外部进行。
因此,使用登录器:
Wheels& GetWheels(const unsigned int position){return _wheels[position];}
并用
称呼它 _cars[iter1].GetWheels(iter2).SetNeedToChange(true);
这假定可以从外部访问车轮对象。您可以选择以
之类的方式选择进一步封装它void setWheelNeedToChangeStatus(const unsigned int position, const bool status){
_wheels[position].SetNeedToChange(status);
}
顺便说一句,不确定您使用哪种命名标准,但通常在较低的情况下,至少在我知道的任何惯例中。
在这里:
vector<Wheels> GetWheels() {return _wheels;}
您返回车轮向量的复制。如果更改它,则不将更改应用于成员向量,仅适用于副本。
而是返回参考:
vector<Wheels>& GetWheels() {return _wheels;}
您是通过复制返回的:
vector<Wheels> GetWheels() {return _wheels;}
因此,您修改了该行结束后被破坏的副本。您想要的是返回参考:
vector<Wheels>& GetWheels() {return _wheels;}
^~~~~~~~~~~~~~~~~~!!
您正在获得_wheels vector的副本。
如果您想更改值,最好将其作为参考返回:
:vector<Wheels>& GetWheels() {return _wheels;}
相关文章:
- 如何在自删除后将对象设置为nullptr
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- std::用派生类对象设置,但用gcc8.1设置基类比较器
- 如何在 gdb 中的所有构造函数上同时为 C++ 对象设置断点?
- 如何将C++ time_t对象设置为纪元?
- 使用PYBIND11,如何为Array_t对象设置基础内存的所有权
- 如何使用基类对象设置派生类变量的值
- C 不能将对象设置为方法的返回对象
- 一旦对象设置为 null,用于声明对象的堆大小的变量就设置为 null?
- 无法在openGL和GLUT中为我想要的确切对象设置动画
- 如何将2D向量中的对象设置为空指针[C ]
- 如何用类别的consumetrized构造函数声明使用类的比较对象设置的STL设置
- 为什么重载运算符不将主对象设置为值集
- 如何在 OpenGL 中为 3D 对象设置原点
- C++是否可以将fstream对象设置为在每次调用<<
- 如何从C#将对象设置为C++
- 哪个更好?如果子对象是类的成员,则为子对象设置父对象
- c++无法为包含静态变量的对象设置NULL指针
- 将数组中的对象设置为新对象
- 在OpenGL中为不同的对象设置单独的材质属性