Pregunta

Actualmente estoy trabajando para crear una función sobrecargada para el operador ==. Estoy creando un archivo HPP para mi lista vinculada y parece que no puedo hacer que este operador funcione en el archivo HPP.

Actualmente tengo esto:

template <typename T_>
class sq_list 
{

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

reference operator * ()     {
        return _c;
    };

};
}

Recibo alrededor de 10 errores, pero se repiten prácticamente como errores:

C2804: binario 'operador ==' tiene demasiados parámetros
C2333: 'sq_list :: operator ==': error en la declaración de función; omitiendo el cuerpo de la función
C2143: Error de sintaxis: falta ';' antes de '*'
C4430: Falta de tipo especificador - int asumido. Nota: C ++ no admite el incumplimiento predeterminado

He intentado cambiar las cosas, pero constantemente recibo los mismos errores que anteriormente

Cualquier consejo o asistencia sobre esto es muy apreciado.

¿Fue útil?

Solución

El operador miembro solo tiene una argumento, que es el otro objeto. El primer objeto es la instancia en sí:

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

Esta definición en realidad no tiene sentido, ya que solo se llama a sí mismo recursivamente. En cambio, debería llamar a alguna operación de miembro, como return this->impl == rhs.impl;.

Otros consejos

Está declarando la sobrecarga == como parte de la definición de clase, como se obtendrán las instancias de método. Por lo tanto, el primer parámetro que solicita, lhs, ya está implícito: recuerde, dentro de los métodos de una instancia a los que tiene acceso this.

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

El método operador == () como parte de una clase debe entenderse como "este objeto sabe cómo compararse con los demás".

Puede sobrecargar el operador == () fuera de la clase para recibir dos argumentos, ambos objetos que se comparan, si eso tiene más sentido para usted. Mira aquí:http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

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

Los operadores de comparación son muy simples. Define == primero, usando una firma de función como esta:

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

Cómo comparar los objetos myClass es tuyo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top