C2440无法将int转换为int&

时间:2017-04-11 16:41:34

标签: c++

我的代码遇到了一些麻烦。我想我错过了一些指针,但找不到它。

这是我的课程代码:

template <class T, class U>
class KeyValue

{
private:
    T _key;
    U _value;
public:


    KeyValue();
    KeyValue(T key, U value)
    {
        this->_key = key;
        this->_value = value
    };
    T GetKey() { return this->_key; }
    U GetValue() { return this->_value; }

};

错误发生在:

template<class T, class U>
inline U & SparseArray<T, U>::operator[](T key)
{
    for (std::list<KeyValue<T, U>>::iterator it = list->begin(); it != list->end(); it++)
    {
        if (it->GetKey() == key)
        {
            return it->GetValue();
        }
    }

    return (list->insert(list->begin(), KeyValue<T, U>(key, U())))->GetValue();
}

1 个答案:

答案 0 :(得分:2)

GetValue()按值返回,这意味着它会为您提供 prvalue prvalue 是一个临时对象,在完整表达式结束时超出范围。因此,您不能将左值引用绑定到它,这是您的返回类型(U &)。

如果您想要返回对基础_key的引用,那么GetValue()需要返回左值引用,如

T& GetKey() { return this->_key; }