我的代码遇到了一些麻烦。我想我错过了一些指针,但找不到它。
这是我的课程代码:
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();
}
答案 0 :(得分:2)
GetValue()
按值返回,这意味着它会为您提供 prvalue 。 prvalue 是一个临时对象,在完整表达式结束时超出范围。因此,您不能将左值引用绑定到它,这是您的返回类型(U &
)。
如果您想要返回对基础_key
的引用,那么GetValue()
需要返回左值引用,如
T& GetKey() { return this->_key; }