如何编写一个返回对成员对象的引用的const访问器,以便进行编辑?

1 c++ const reference accessor

这是问题所在.我编写了这个函数来返回对成员向量的i元素的引用,因此可以编辑该元素.这是代码:

Letter& Literal::get (int i) const {

   return lit_m.at (i); //Vector of Letter objects
}
Run Code Online (Sandbox Code Playgroud)

但是g ++不会让我将该元素分配给非const引用:

g++ -o literal.o -c literal.cpp
literal.cpp: In member function ‘Letter& Literal::get(int) const’:
literal.cpp:34: error: invalid initialization of reference of type ‘Letter&’ from expression of type ‘const Letter’
Run Code Online (Sandbox Code Playgroud)

怎么可以解决?我的想法是建立一个类似于矢量的at()函数的函数,所以它是const,因为它不编辑对象本身,但它应该让我编辑返回的对象......是否可能?

已解决:我只需要重载函数:),所以声明一个const和一个非const版本.我担心不允许const和非const重载,但是我看到const改变了参数列表,使其成为可能.

BЈо*_*вић 5

问题是这个成员函数:

Letter& get (int i) const
Run Code Online (Sandbox Code Playgroud)

你宣称它是const,因此,

const T& at() const
Run Code Online (Sandbox Code Playgroud)

调用vector类的成员函数,将const引用返回给第i个项,因此无法修改它.

如果你真的需要修改那个元素,不要将你的get()函数声明为const,并像现在一样返回对元素的引用.

顺便说一句,你声明了函数const,并且你返回非const引用.