Pergunta

Atualmente, estou trabalhando na criação de uma função sobrecarregada para o operador==.Estou criando um arquivo hpp para minha lista vinculada e não consigo fazer esse operador trabalhar no arquivo hpp.

Atualmente tenho este:

template <typename T_>
class sq_list 
{

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

reference operator * ()     {
        return _c;
    };

};
}

Recebo cerca de 10 erros, mas eles praticamente se repetem como erros:

C2804: 'operador==' binário tem muitos parâmetros
C2333: 'sq_list :: operator==': erro na declaração da função;pulando o corpo da função
C2143: erro de sintaxe: ausente ';'antes de '*'
C4430: especificador de tipo ausente - int assumido.Nota: C ++ não suporta default-int

Eu tentei mudar as coisas, mas sempre recebo os mesmos erros acima

Quaisquer dicas ou ajuda sobre isso são muito apreciadas.

Foi útil?

Solução

O operador de membro tem apenas um argumento, que é o outro objeto.O primeiro objeto é a própria instância:

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

Na verdade, essa definição não faz sentido, já que ela apenas chama a si mesma recursivamente.Em vez disso, deve chamar alguma operação de membro, como return this->impl == rhs.impl;.

Outras dicas

Você está declarando a sobrecarga== como parte da definição da classe, como as instâncias do método obterão.Assim, o primeiro parâmetro que você solicita, lhs, já está implícito: lembre-se, dentro dos métodos de uma instância, você tem acesso a this.

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

O método operator== () como parte de uma classe deve ser entendido como "este objeto sabe como se comparar a outros".

Você pode sobrecarregar o operador== () fora da classe para receber dois argumentos, ambos os objetos sendo comparados, se isso fizer mais sentido para você.Veja aqui: http://www.learncpp.com/cpp-tutorial/94-sobrecarregando-os-operadores-de-comparação /

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

Os operadores de comparação são muito simples.Defina== primeiro, usando uma assinatura de função como esta:

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

COMO comparar objetos MyClass é inteiramente seu.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top