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

时间:2014-01-12 19:27:07

标签: c++ templates reference

我有一个模板类:

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&amp;' 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

问题是你有一个const成员函数,但是你从它返回一个可变引用。 (btw cl的错误消息是error C2440: 'return' : cannot convert from 'const bool' to 'bool &',这使得这一点清楚)。这可能不是你真正的意图,所以要么使用

T GetMember() const
{
  return member;
}

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

答案 1 :(得分:1)

T& GetMember() const

应该是

const T& GetMember() const

const不仅仅是让您的代码看起来更安全的关键字,它还可以使您的代码更加安全;)