2012-10-11 16 views
9

Escribo clase de cadena por mi cuenta. Y tengo ese código. Solo quiero sobrecargar operator=. Este es mi código real, y obtengo un error en la última parte del código.Error al sobrecargar operador (debe ser una función de miembro no estático)

#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; 
} 

Pero, por desgracia me sale error 'S & operador = (const S &)' debe ser una función miembro no estática.

+2

Este fragmento de código compila para mí con g ++. – Neil

+1

No estoy seguro de lo que está haciendo, pero la función compila bien con 'memcpy' declaró: http://liveworkspace.org/code/92ac98695817213f6c15af241904d165 – chris

+0

No le falta un punto y coma después de la definición de la clase, ¿verdad? – dasblinkenlight

Respuesta

16

Te faltan nombre de la clase:

Este es el operador global, = no puede ser global:

S &operator=(const S &s) 

debe definir esto como función de la clase:

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

Sus obras)) Gracias. – Rocketq

3

creo PiotrNycz tiene proporcionó la respuesta razonable. Aquí, por favor, perdónenme por agregar una palabra más.

En C++, la función de sobrecarga del operador de asignación no pudo ser friend function. El uso de la función friend para operator =, causará el mismo error de compilación "overloading = operator debe ser una función miembro no estática".

+0

Esto realmente debería ser un comentario sobre la otra respuesta, si es solo una aclaración. Alternativamente, elimine la nota sobre que es "una palabra más" y hágala una respuesta adecuada. –

Cuestiones relacionadas