2012-10-11 13 views
9

Scrivo da solo la classe stringa. E ho un tale codice. Voglio solo sovraccaricare operator=. Questo è il mio codice reale e ottengo l'errore nell'ultima parte del codice.Errore durante l'overloading dell'operatore (deve essere una funzione membro non statico)

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

Ma purtroppo ottengo l'errore 'S & operator = (const S &)' deve essere una funzione membro non statico.

+2

Questo snippet di codice viene compilato per me con g ++. – Neil

+1

Non sai cosa stai facendo, ma la funzione si compila bene con 'memcpy' dichiarato: http://liveworkspace.org/code/92ac98695817213f6c15af241904d165 – chris

+0

Non ti manca un punto e virgola dopo la definizione della classe, vero? – dasblinkenlight

risposta

16

Ti manca il nome della classe:

Questo è operatore globale, = non può essere globale:

S &operator=(const S &s) 

È necessario definire questo come funzione di classe:

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

Le sue opere)) Grazie. – Rocketq

3

credo PiotrNycz ha fornito la risposta ragionevole. Qui per favore perdonami per aggiungere un'altra parola.

In C++, la funzione di sovraccarico dell'operatore di assegnazione non può essere friend function. Utilizzando la funzione friend per operator =, verrà generato lo stesso errore del compilatore "overloading = operator deve essere una funzione membro non statico".

+0

Questo dovrebbe essere un commento sull'altra risposta, se è solo un chiarimento. In alternativa, rimuovi la nota che è "un'altra parola" e rendila una risposta appropriata. –

Problemi correlati