2017-04-11 2 views
0

umwandeln Ich habe einige Probleme mit meinem Code. Ich glaube, ich habe einen Zeiger verpasst, kann ihn aber nicht finden.C2440 Kann Int nicht in Int &

Hier ist mein Code für die Klasse:

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; } 

}; 

Und der Fehler auftritt, in:

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(); 
} 
+2

Bitte geben Sie eine richtige [MCVE]. Was Sie hier beschrieben haben, ist nicht genug für jeden Benutzer, um Ihr Problem neu zu erstellen und damit zu diagnostizieren. – Xirema

+0

'inline U &' ist das, was Ihr Member zurückgibt, aber 'obj-> GetValue()' ist das, was es tatsächlich zurückgibt, was 'U GetValue() 'in der tatsächlichen Implementierung ist. Ein Wert. Ein 'U' ist kein' U & '. – WhozCraig

Antwort

2

GetValue() kehrt nach Wert, was bedeutet, es gibt Ihnen ein prvalue. prvalue ist ein temporäres Objekt, das am Ende des vollständigen Ausdrucks den Gültigkeitsbereich verlässt. Aus diesem Grund dürfen Sie keine lvalue Referenz daran binden, was Ihr Rückgabetyp (U &) ist.

Wenn Sie einen Verweis auf die zugrunde liegenden _key zurückkehren wollen, dann muss GetValue() eine lvalue Bezug auf das Rück wie

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