2011-09-21 12 views

risposta

8

Quello che stai facendo male qui a livello di lingua sta sovraccaricando gli operatori per i puntatori. Almeno un argomento di un operatore sovraccarico deve essere di un tipo definito dall'utente o un riferimento a uno.

Ma lo stai facendo anche a un altro livello. Stai restituendo un puntatore, il che significa che probabilmente dovrai allocare un po 'di spazio dinamicamente nell'operatore. Bene, chi possiede quel magazzino? Chi lo pubblicherà?

Si dovrebbe solo prendere i riferimenti e restituire per valore, qualcosa di simile a:

template <typename T> 
Point<T> operator +(Point<T> const& point, Vector<T> const& vector) { 
    return Point<T>(point.x + vector.x, point.y + vector.y); 
} 
+0

Uno dei motivi per cui sto restituendo un puntatore è che non sono riuscito a capire come restituire in base al valore. Da dove otterrei questo punto ? Non riesco a crearne uno nuovo() e restituirlo in questo modo. –

+0

@Doug: ho aggiunto un esempio, considerando le tipiche classi Point e Vector. Se vieni da Java, la prima cosa che devi imparare è che 'new' deve essere usato molto frequentemente. –

+0

Che tipo di allocazione ha questo? È in qualche modo collegato alla funzione di chiamata? –

4

Non è possibile sovraccaricare gli operatori per i tipi fondamentali, nel tuo caso entrambi gli argomenti sono puntatori. Volevi invece dei riferimenti?

+0

Quindi, anche se si tratta di un puntatore ad un certo tipo particolare, non riesco ancora a sovraccaricarlo? –

+0

@DougTreadwell Sarebbe difficile avere un puntatore che non punta a un tipo particolare non è vero? ;) – quasiverse

+0

intendevo, punta a un tipo definito dall'utente. Ma suppongo che il compilatore non guardi a cosa punta, solo che cos'è? –

4

Quando si definisce un operatore, almeno uno degli argomenti deve essere una classe definita dall'utente o un tipo enumerato (o un riferimento a uno di questi). I puntatori non si qualificano come uno di quelli. Dovresti utilizzare gli argomenti di riferimento e restituire un Punto non qualificato <T>.

+0

Come restituire un Punto non qualificato ? –

Problemi correlati