2015-05-10 22 views
6

perché il seguente tiro questo errore:errore: Qualificazioni caduto in riferimento di tipo x legame di inizializzazione di tipo y

IntelliSense: qualifiers dropped in binding reference of type "string &" to initializer of type "const string"

.h

class A 
{ 
public: 
    wstring& GetTitle() const; 
private: 
    wstring title;  
}; 

cpp

wstring& GetTitle() const 
{ 
    return this->title; 
} 

Se rimuovo la parola const, smette di lamentarsi eppure non ho mai apportato alcuna modifica alla variabile?

+0

possibile duplicato [legame di riferimento ad un valore di tipo gocce qualificatori] (http://stackoverflow.com/questions/27812119/binding-of-reference-to-a -valore-di-tipo-gocce-qualificazioni) – Cinch

+0

Ho letto quella domanda prima, e non ho ottenuto nulla da esso heheh .. Quindi immagino che questo sia più utile! – Jimmyt1988

+0

Il primo paragrafo della prima risposta dice la stessa della prima risposta qui. Il problema è lo stesso, ma la chiarezza richiede una modifica, non una nuova domanda. – Cinch

risposta

5

Restituendo un riferimento non const a un membro della classe, si sta dando al chiamante l'accesso all'oggetto come se fosse non const. Ma GetTitle, essendo una funzione const, non ha il diritto di concedere quell'accesso.

Ad esempio:

A a; 
string& b = a.GetTitle(); // Allows control over original variable 
+0

ahhhh, è perché se hanno chiamato la funzione e lo hanno restituito in una 'stringa &' invece che in una 'stringa 'potrebbero cambiare il valore originale? O sono completamente fuori? – Jimmyt1988

+1

@ Jimmyt1988: esattamente corretto. –

+0

Hurrahhh, grazie amico! segnando correttamente quando posso! – Jimmyt1988

Problemi correlati