我有一个A类,我希望返回对A类中存储的向量中元素的引用。
A类
private:
vector<B> v;
public:
B& getElement()
{
//determine i...
return v[i];
}
在我的主要内容中,我将一个B对象设置为getElement()函数返回的对象。但是,当我修改它时,vector元素没有被修改
main()的
B ele = A.getElement();
//modify B...
我应该在这里做些什么?
答案 0 :(得分:4)
getElement
方法正确地返回对B
实例的引用,但本地ele
不是引用它是一个值。这里引人注目的是以下
// Copy constructor B::B(B& other) is being called
B ele = B(A.getElement());
如果您希望ele
成为参考,那么您需要将其声明为
B& ele = A.getElement();
答案 1 :(得分:2)
此代码:
B ele = A.getElement();
//modify B...
将A.getElement()
引用返回的元素的副本复制到ele
。
如果您希望ele
引用A
中的元素,请尝试:
B& ele( A.getElement());
//modify ele...
答案 2 :(得分:0)
使用此声明
B ele = A.getElement();
对象ele包含向量元素的副本。您应该使用对向量元素的引用
B &ele = A.getElement();
但是,如果例如向量将被调整大小,则考虑到引用可能变得无效。因此,最好使用函数调用在一个语句中更改向量的元素。例如
A.getElement() = SomeNewValue;
你也可以为类重载operator []。在这种情况下,代码可能看起来像
A a;
a[i] = SomeNewValue;