Domanda

Attualmente sto lavorando alla creazione di una funzione sovraccarica per l'operatore ==. Sto creando un file HPP per il mio elenco collegato e non riesco a far funzionare questo operatore nel file HPP.

Attualmente 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 si ripetono praticamente come errori:

C2804: Binary 'Operator ==' ha troppi parametri
C2333: 'sq_list :: operator ==': errore nella funzione della funzione; saltare il corpo della funzione
C2143: Errore di sintassi: mancante ';' prima '*'
C4430: Specificatore di tipo mancante - INT assunto. NOTA: C ++ non supporta Default-Int

Ho provato a cambiare le cose ma ho costantemente gli stessi errori di sopra

Qualsiasi consiglio o assistenza su questo è molto apprezzato.

È stato utile?

Soluzione

L'operatore membro ha solo uno 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, dal momento che si chiama semplicemente ricorsivamente. Invece, dovrebbe chiamare alcune operazioni di membro, come return this->impl == rhs.impl;.

Altri suggerimenti

Stai dichiarando il sovraccarico == come parte della definizione della classe, man mano che le istanze del metodo otterranno. Pertanto, il primo parametro richiesto, lhs, è già implicito: ricorda, all'interno di un'istanza a cui hai accesso this.

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

Il metodo operatore == () come parte di una classe dovrebbe essere inteso come "questo oggetto sa come confrontarsi con gli altri".

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

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

Gli operatori di confronto sono molto semplici. Define == First, usando una firma della funzione come questa:

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

Come confrontare gli oggetti myclass è tutto tuo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top