Frage

Ich arbeite derzeit daran, eine überlastete Funktion für den == Operator zu erstellen. Ich erstelle eine HPP -Datei für meine verknüpfte Liste und kann diesen Bediener nicht in der HPP -Datei zum Arbeiten bringen.

Ich habe derzeit Folgendes:

template <typename T_>
class sq_list 
{

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

reference operator * ()     {
        return _c;
    };

};
}

Ich bekomme ungefähr 10 Fehler, aber sie wiederholen sich ziemlich als Fehler:

C2804: Binärer 'Operator ==' hat zu viele Parameter
C2333: 'SQ_LIST :: Operator ==': Fehler in der Funktionserklärung; Überspringen der Funktionskörper
C2143: Syntaxfehler: fehlend ';' Vor '*'
C4430: Fehlender Typ -Spezifizierer - int angenommen. HINWEIS: C ++ unterstützt keine Standard-In-Int

Ich habe versucht, die Dinge zu ändern, aber ich bekomme konstant die gleichen Fehler wie oben

Alle Tipps oder Unterstützung hierfür werden sehr geschätzt.

War es hilfreich?

Lösung

Der Mitgliedsbetreiber hat nur eines Argument, was das andere Objekt ist. Das erste Objekt ist die Instanz selbst:

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

Diese Definition macht eigentlich keinen Sinn, da sie sich nur rekursiv bezeichnet. Stattdessen sollte es eine Mitgliederoperation anrufen, wie return this->impl == rhs.impl;.

Andere Tipps

Sie deklarieren die == Überladung als Teil der Klassendefinition, wie eine Methode wird. Somit der erste Parameter, den Sie anfordern, lhs, ist bereits implizit: Denken Sie daran, auf die Methoden einer Instanz zugreifen zu können this.

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

Die Methode des Operators == () als Teil einer Klasse sollte als "dieses Objekt weiß, wie man sich mit anderen verglichen".

Sie können den Operator überlasten == () außerhalb der Klasse, um zwei Argumente zu erhalten, wobei beide Objekte verglichen werden, wenn dies für Sie sinnvoller ist. Siehe hier:http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

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

Die Vergleichsbetreiber sind sehr einfach. Define == zuerst mit einer Funktionssignatur wie folgt:

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

So vergleichen Sie MyClass -Objekte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top