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.
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)
// ^^^
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".