2009-08-20 16 views
14

Sto semplicemente cercando di sovraccaricare un operatore + e sto ottenendo questo compilatore avvertimentocompilatore C++ di avvertimento - il ritorno variabile locale

reference to local variable 'tmp' returned 

Ecco il codice per il sovraccarico di

const Int& Int::operator+(const Int& p) const 
{ 
    Int tmp = value + p.value; 
    return tmp; 
} 

Qui è la classe

class Int{ 
    int value; 
public: 
    Int() {} // default constructor 
    Int(int v) : value(v) {} 
    Int& operator=(const Int&); 
    const Int& operator+(const Int&) const; 
}; 

risposta

15

Non è possibile restituire un riferimento a una variabile locale. All'interno della funzione operator+(), stai creando una variabile locale chiamata tmp. Sarà distrutto non appena la funzione si chiude. Non è possibile restituire un riferimento a tale variabile, poiché non esiste più quando la funzione chiamante ottiene il valore di ritorno.

Cambia la definizione della funzione di:

const Int operator+(const Int&) const; 

Sarebbe costruire senza avvisi e funzionano bene anche.

7

Quello che si tenta di fare è di restituire un riferimento ad una posizione di memoria che non sarà valida al momento della sua restituzione.

La variabile tmp scompare quando esce dall'ambito (ovvero quando l'operatore + è terminato).

Poiché il tipo di ritorno è Int &, non il valore di tmp viene restituito a "return tmp" ma un riferimento a tmp. Questo non è corretto perché tmp non esisterà più dopo che il metodo è finito !!

Soluzione: non ritorno, di riferimento, ma come Int

0

tmp ha una classe di auto stoccaggio e scompare quando usciamo. La risposta è specificare statico.

static Int tmp = value + p.value; 

Lo stoccaggio assegnata a tmp rimarrà riservato per tutta la durata del programma.

Problemi correlati