7

Attualmente sto lavorando alla creazione di una funzione sovraccaricata per l'operatore ==. Sto creando un file hpp per la mia lista collegata e non riesco a far funzionare questo operatore nel file hpp.Sovraccarico della funzione ==

Al momento ho questo:

template <typename T_> 
class sq_list 
{ 

bool operator == (sq_list & lhs, sq_list & rhs) 
{ 
    return *lhs == *rhs; 
}; 

reference operator *()  { 
     return _c; 
    }; 

}; 
} 

ricevo circa 10 errori, ma hanno praticamente ripetere gli errori:

C2804: 'operatore ==' binario ha troppi parametri
C2333 : 'sq_list :: operator ==': errore nella dichiarazione delle funzioni; saltando il corpo della funzione
C2143: errore di sintassi: mancante ';' prima di '*'
C4430: specificatore di tipo mancante - int assunto. Nota: C++ non supporta default-int

Ho provato a cambiare le cose intorno, ma io constanly ottengo gli stessi errori come sopra

Eventuali consigli o assistenza su questo è molto apprezzato.

+0

È necessario sql. Flexo

+0

E se è una funzione membro, accetta un'arte e la usa – Flexo

+0

@awoodland: No, non è così; all'interno di una definizione del modello di classe, solo il nome del modello può fare riferimento all'istanza del modello corrente. E non c'è comunque alcun "T" nel codice dell'OP. –

risposta

7

L'operatore membro ha solo un argomento, che è l'altro oggetto. Il primo oggetto è l'istanza stessa:

template <typename T_> 
class sq_list 
{ 
    bool operator == (sq_list & rhs) const // don't forget "const"!! 
    { 
     return *this == *rhs; // doesn't actually work! 
    } 
}; 

Questa definizione in realtà non ha senso, dato che solo si chiama ricorsivamente. Invece, dovrebbe chiamare alcune operazioni membro, come return this->impl == rhs.impl;.

0

Si sta dichiarando il sovraccarico == come parte della definizione della classe, come si otterrà un metodo. Pertanto, il primo parametro richiesto, lhs, è già implicito: ricorda che, nei metodi di un'istanza, hai accesso a this. Metodo

class myClass { 
    bool operator== (myClass& other) { 
     // Returns whether this equals other 
    } 
} 

L'operatore ==() come parte di una classe dovrebbe essere inteso come "questo oggetto sa confrontarsi agli altri".

È possibile sovraccaricare l'operatore ==() al di fuori della classe per ricevere due argomenti, entrambi gli oggetti confrontati, se questo ha più senso per l'utente. Vedi qui: http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

0

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

Gli operatori di confronto sono molto semplici. Definire == prima, utilizzando una firma funzione come questa:

bool MyClass::operator==(const MyClass &other) const { 
    ... // Compare the values, and return a bool result. 
    } 

come confrontare MyClass oggetti è tutto tuo.

Problemi correlati