C++:更新类的向量成员变量
C++: updating a vector member variable of a class
我有一个向量作为类"B"的成员。它有自己的设置和获取功能:
setVector(vector<A*>)
getVector()
我感兴趣的是从另一个函数中填充这个向量,该函数使用类"B"的对象。因此,我创建了类"A"的新对象,并错误地更新了类"B"的向量成员变量:
A* obj = new A;
B b;
B.getVector().push_back(obj);
发生的事情是push_back不起作用。换句话说,当我尝试使用调试器查看成员变量时,我看到向量成员变量的容量仍然为0,就好像我没有向它推送任何东西一样
我尝试将我的实现更改为:
vector<A*> tempVector;
B b;
A* obj = new A;
tempVector.push_back(obj);
b.setVector(tempVector);
它如预期的那样发挥了作用。
我想知道为什么第一个行为是错误的?据我所知,类B的构造函数默认情况下应该创建一个向量。所以当我使用getVector((函数时,它应该将创建的向量返回给我,然后我就可以向它推送_返回。所以我想知道在这种情况下我做错了什么?
问题可能是getVector()
的返回类型。假设它被定义为vector<A*> getVector()
,它会按值返回向量,这意味着您在向量的副本上执行了push_back
,而不是在实际的向量成员上。
如果你想从类外修改向量,你所要做的就是更改函数签名,改为通过引用传递:vector<A*>& getVector()
。这将确保对成员变量进行修改(如push_back
(。
getVector()
的签名可能类似于std::vector<A*> getVector()
。这将返回实际矢量的副本。然后push_back
到复制的向量,但永远不要修改成员变量。你想返回一个参考:
std::vector<A*> &getVector();
const std::vector<A*> &getVector() const;
相关文章:
- 向量成员在管理类指针C++队列时丢失
- C++:更新类的向量成员变量
- C++ 入门 12.1:我可以在类中使用静态向量成员实现 StrBlob<string> 吗?
- 具有向量成员的基类<int>
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 无法将类构造函数中新创建的对象复制到 C++ 中的向量成员
- 修改另一个类的向量成员时出错
- 返回对私有向量成员元素的非常量引用是否是一种不好的做法
- 如何在 C++ 中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- std::向量成员变量 EXC_BAD_ACCESS
- 如何使用其定义附近的显式长度/值构造函数初始化向量成员变量
- "Empty"数组\向量成员 C++
- 如何使用初始值设定项列表初始化 2D 向量成员
- 如何在类定义中初始化向量成员变量
- 如何初始化结构的向量成员
- 使用向量<向量>成员实例化对象时的隔离错误<int>
- 为向量成员和更新元素指定默认值
- 保持类的向量成员与类实例连续
- C++:在类构造函数中填充向量后,向量成员被销毁
- 通过引用另一个类方法传递向量成员变量