在 const 引用中调用函数

Calling functions inside of const references

您好,我想在我的 class 中有一个 getter,return 是对对象向量的“只读”引用。这些对象中的每一个都有自己的变量和函数,我需要调用它们。我尝试设置它的方法是在主 class return 中设置 getter 一个 const 引用。但是,我似乎无法访问向量中保存的对象的值。有一个更好的方法吗?这是一个最小的可重现示例。谢谢。

#include <vector>
class Obj
{
private:
    int val;
public:
    Obj() { val = 10; }
    inline int getVal() { return val; }
};

class Foo
{
private:
    std::vector<Obj> obsVec;
public:
    Foo()
    {
        Obj a;
        Obj b;
        obsVec.push_back(a);
        obsVec.push_back(b);
    }
    const std::vector<Obj>& getConstRef() const { return obsVec; }
};

int main()
{
    Foo foo;
    foo.getConstRef()[0].getVal(); // Here is where I get the error
    return 0;
}

我得到的错误是:

Error (active) E1086 the object has type qualifiers that are not compatible with the member function "Obj::getVal"

foo.getConstRef()[0]returnsconst A &,但是getVal没有标明const.

另请注意,inline 在这里没有用,因为在 class 主体中定义(而不是声明)的函数隐式 inline.

您需要将 getVal() 声明为 const:

inline int getVal() const { return val; }

而不是:

inline int getVal() { return val; }