c++ - C++:更新类的向量成员变量
问题描述
我有一个向量作为“B”类的成员。它有它的 set 和 get 函数:
setVector(vector<A*>)
getVector()
我有兴趣从另一个使用此类“B”对象的函数填充此向量。所以我创建了“A”类的新对象,并错误地更新了“B”类的向量成员变量:
A* obj = new A;
B b;
B.getVector().push_back(obj);
发生的事情是 push_back 不起作用。换句话说,当我尝试使用调试器查看成员变量时,我看到向量成员变量的容量仍然为 0,就好像我没有对其进行 push_back 任何操作一样。
我尝试将我的实现更改为:
vector<A*> tempVector;
B b;
A* obj = new A;
tempVector.push_back(obj);
b.setVector(tempVector);
它按预期工作。
我想了解为什么第一个行为是错误的?据我了解,B 类的构造函数应该默认创建一个向量。因此,当我使用 getVector() 函数时,它应该将创建的向量返回给我,然后我可以 push_back 给它。所以我想知道在这种情况下我做错了什么?
解决方案
问题可能是getVector()
. 假设它被定义为vector<A*> getVector()
,它按值返回向量,这意味着您push_back
在向量的副本上执行了 ,而不是在实际的向量成员上。
如果您希望能够从类外部修改向量,您所要做的就是更改函数签名以通过引用传递它:vector<A*>& getVector()
. 这将确保修改(例如push_back
)发生在成员变量上。
推荐阅读
- ruby-on-rails - 如何将 Rails 用户身份验证和授权与前端应用程序集成?
- python - How to instantiate a class given its parent class in Python?
- java - java.lang.IllegalArgumentException:没有为 id 0x7f0700ca 找到视图
- php - 在 Codeigniter 中通过 ftp 上传图片 url
- python - Python Flask 应用程序重复 HTTP 请求
- unity3d - Time.timeScale 不适用于 Unity.Physics 包(DOTS)
- python - 我在代码中的错误是什么,为什么会出现该错误?
- android - 膨胀类片段时出错原因:android.view.InflateException:二进制 XML 文件
- javascript - 无法在 Firestore 中设置状态添加承诺
- javascript - 如何隐藏多张图片只显示一张图片?