2010-03-24 45 views
9

Sto cercando di sovraccaricare l'operatore dereference, ma compilando il codice seguente genera l'errore 'initializing' : cannot convert from 'X' to 'int':sovraccarico dereference operatore

struct X { 
    void f() {} 
    int operator*() const { return 5; } 
}; 

int main() 
{ 
    X* x = new X; 
    int t = *x; 
    delete x; 
    return -898; 
} 

Che cosa sto facendo di sbagliato?

risposta

14

È necessario applicare l'operatore di dereferenziazione a un tipo di classe. Nel tuo codice x ha un tipo di puntatore. Scrivere il seguente:

int t = **x; 

o

int t = x->operator*(); 
14

Stai dereferenziando un puntatore a X. La tua classe è OK (per quanto è implementata).

int main() 
{ 
    X x; // no pointer 
    int t = *x; // x acts like a pointer 
} 
1

Se si desidera che il codice originale di lavorare, è necessario sovraccaricare l'operatore int-cast per la classe:

operator int() const { return 5; } 
+0

'operatore int 'ha un sacco di trucchi ed è meglio evitare. L'operatore di dereferenziazione ha un uso legittimo come emulazione puntatore. – Potatoswatter

+0

@David: quelli che convertono in 'bool' ne hanno uno in più rispetto agli altri, ma forse è un drop nel bucket; v) – Potatoswatter

+0

@David: la domanda riguarda' int operator * ', non' operator int * ' – visitor

Problemi correlati