web-dev-qa-db-fra.com

Erreur lors de la surcharge de la surcharge (doit être une fonction de membre non statique)

J'écris la classe de cordes seul. Et j'ai ce code. Je veux juste surcharger operator=. Ceci est mon code actuel et je reçois une erreur dans la dernière partie du code.

#include <iostream>
#include <string.h>
#include <stdlib.h>

using namespace std;

class S {
    public:
        S();
        ~S() { delete []string;}
        S &operator =(const S &s);

    private:
        char *string;
        int l;
};

S::S()
{
    l = 0;
    string = new char[1];
    string[0]='\0';
}

S &operator=(const S &s)
{
    if (this != &s)
    {
        delete []string;
        string = new char[s.l+1];
        memcpy(string,s.string,s.l+1);
        return *this;
    }
    return *this;
}

Mais malheureusement, je reçois une erreur 's & opérateur = (const s s &)' doit être une fonction de membre non statique.

17
Rocketq

Vous êtes un nom de classe manquant:

C'est un opérateur global, = ne peut pas être global:

S &operator=(const S &s)

Vous devez définir cela comme fonction de classe:

S & S::operator=(const S &s)
//  ^^^
20
PiotrNycz

Je crois que PioTrnycz a fourni la réponse raisonnable. Ici s'il vous plaît pardonnez-moi pour ajouter un mot de plus.

En C++, la fonction de surcharge de l'opérateur d'affectation ne pouvait pas être friend function. Utilisation de la fonction d'ami pour l'opérateur =, provoquera la même erreur de compilateur "Surcharge = opérateur doit être une fonction de membre non statique".

3
Mr. Pei