Fout bij overbelasting van operator (moet een niet-statische lidfunctie zijn)

Ik schrijf zelf een snaarklas. En ik heb zo’n code. Ik wil gewoon operator= overbelasten. Dit is mijn eigenlijke code en ik krijg een fout in het laatste deel van de 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;
}

Maar helaas krijg ik foutmelding ‘S& operator=(const S&)’ moet een niet-statische lidfunctie zijn.


Antwoord 1, autoriteit 100%

Je mist de naam van de klas:

Dit is een globale operator, = kan niet globaal zijn:

S &operator=(const S &s)

U moet dit definiëren als klassefunctie:

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

Antwoord 2, autoriteit 18%

Ik geloof dat PiotrNycz het redelijke antwoord heeft gegeven. Sorry dat ik nog een woord toevoeg.

In c++ kan de overbelastingsfunctie van de toewijzingsoperator geen friend function zijn. Het gebruik van de vriend-functie voor operator= veroorzaakt dezelfde compilerfout “overloading = operator must be a nonstatic member function”.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes