模板访问器无法从 T 转换为 T& (C++)

Template accessor can not convert from T to T& (C++)

本文关键字:转换 C++ 访问      更新时间:2023-10-16

>我有一个模板化类:

template<class T>
class MyClass
{
public:
    MyClass(T mem)
    {
        member = mem;
    }
    T& GetMember() const
    {
        return(member);
    }
    T member;
};

然后我这样做:

MyClass<bool> test(true);
bool someBool = test.GetMember();

我收到一个编译错误,说它无法将"bool"转换为"bool&"我该如何解决这个问题?

问题是你有一个 const 成员函数,但你从中返回一个可变引用。(顺便说一句,CL的错误消息error C2440: 'return' : cannot convert from 'const bool' to 'bool &'这清楚地表明了这一点)。这可能不是您的真实意图,因此请使用

T GetMember() const
{
  return member;
}

const T& GetMember() const
{
  return member;
}
T& GetMember() const

应该是

const T& GetMember() const

const不仅仅是使代码看起来更安全的关键字,它还直接强制您的代码更安全;)