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”.