Erreur lors de la surcharge de l'opérateur (doit être une fonction membre non statique)
Je suis en train d'écrire la classe string sur mon propre. Et j'ai un tel code. Je veux juste surcharge operator=
. C'est mon code et j'obtiens l'erreur dans la dernière partie 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]='#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;
}
';
}
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, j'obtiens le message d'erreur S '& operator=(const S&)' doit être une fonction membre non statique.
Cet extrait de code compile avec g++.
Pas sûr de ce que vous êtes en train de faire, mais la fonction compile bien avec
Vous n'êtes pas en manque un point-virgule après la définition de la classe, et vous?
C'est ce que j'ai deviné, mais je n'ai jamais rencontré cette erreur de le faire. Est-il un compilateur spécifique qui n'?
Copiez et collez votre code. Tous les. Assez pour reproduire le problème.
Pas sûr de ce que vous êtes en train de faire, mais la fonction compile bien avec
memcpy
déclaré: liveworkspace.org/code/92ac98695817213f6c15af241904d165Vous n'êtes pas en manque un point-virgule après la définition de la classe, et vous?
C'est ce que j'ai deviné, mais je n'ai jamais rencontré cette erreur de le faire. Est-il un compilateur spécifique qui n'?
Copiez et collez votre code. Tous les. Assez pour reproduire le problème.
OriginalL'auteur Rocketq | 2012-10-11
Vous devez vous connecter pour publier un commentaire.
Il vous manque le nom de classe:
C'est l'opérateur global,
=
ne peut être global:Vous devez définir cette classe fonction:
OriginalL'auteur PiotrNycz
Je crois PiotrNycz a fourni la réponse raisonnable. Ici s'il vous plaît pardonnez-moi d'ajouter un mot de plus.
En c++, l'opérateur d'affectation de la surcharge de fonction ne pouvait pas être
friend function
. À l'aide de l'ami de la fonction de l'opérateur=, sera la cause de la même erreur de compilation "surcharge = opérateur doit être une fonction membre non statique".OriginalL'auteur Pei