gpt4 book ai didi

C++:更新类的 vector 成员变量

转载 作者:行者123 更新时间:2023-11-28 01:16:28 25 4
gpt4 key购买 nike

我有一个 vector 作为类“B”的成员。它有它的设置和获取功能:

setVector(vector<A*>)
getVector()

我有兴趣从另一个使用此类“B”的对象的函数填充这个 vector 。因此,我创建了“A”类的新对象,并错误地执行了以下操作来更新“B”类的 vector 成员变量:

A* obj = new A;
B b;
B.getVector().push_back(obj);

发生的事情是 push_back 不起作用。换句话说,当我尝试使用调试器查看成员变量时,我发现 vector 成员变量的容量仍然为 0,就好像我没有向它 push_back 任何东西一样。

我尝试将我的实现更改为:

vector<A*> tempVector;
B b;
A* obj = new A;
tempVector.push_back(obj);
b.setVector(tempVector);

它按预期工作。

我想了解为什么第一个行为是错误的?据我了解,B 类的构造函数应该默认创建一个 vector 。因此,当我使用 getVector() 函数时,它应该将创建的 vector 返回给我,然后我可以 push_back 给它。所以我想知道在这种情况下我做错了什么?

最佳答案

问题可能出在getVector()的返回类型上.假设它定义为 vector<A*> getVector() ,它按值返回 vector ,这意味着您执行了 push_back在 vector 的拷贝上,但不在实际的 vector 成员上。

如果您希望能够从类外部修改 vector ,您所要做的就是更改函数签名以通过引用传递它:vector<A*>& getVector() .这将确保修改(例如 push_back)发生在成员变量上。

关于C++:更新类的 vector 成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58572645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com