7

Actualmente estoy trabajando en la creación de 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 trabaje en el archivo hpp.Sobrecarga de la función ==

Actualmente tengo esto:

template <typename T_> 
class sq_list 
{ 

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

reference operator *()  { 
     return _c; 
    }; 

}; 
} 

Tengo alrededor de 10 errores, pero más o menos repetida como errores:

C2804: binario 'operador ==' tiene demasiados parámetros
C2333 : 'sq_list :: operator ==': error en la declaración de la función; omisión del cuerpo de la función
C2143: error de sintaxis: falta ';' before '*'
C4430: especificador de tipo faltante - int assume. Nota: C++ no soporta por defecto-int

He intentado cambiar las cosas pero constanly consigo los mismos errores que el anterior

Cualquier consejo o asistencia en este es muy apreciada.

+0

Necesita sqlist Flexo

+0

Y si se trata de una función miembro se necesita una técnica y usa esto – Flexo

+0

@awoodland: No, no lo hace; dentro de una definición de plantilla de clase, el nombre de la plantilla solo puede referirse a la instancia de la plantilla actual. Y no hay 'T' en el código del OP de todos modos. –

Respuesta

7

El operador miembro solo tiene un argumento, que es el otro objeto. El primer objeto es la propia instancia:

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 sólo llama a sí mismo de forma recursiva. En su lugar, debería llamar a alguna operación miembro, como return this->impl == rhs.impl;.

0

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

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

El operador ==() como parte de una clase debe ser entendido 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 se comparan, si eso tiene más sentido para usted. Ver aquí: http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

0

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

Los operadores de comparación son muy simples. == definen en primer lugar, el uso de una firma función como esta:

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

cómo comparar MiClase objetos es todo suyo.

Cuestiones relacionadas