Was ist hier falsch?
-
class Feld { public: Feld(int size = 0, int initDigit = 0); Feld(const Feld& lFeld); ~Feld(); Feld& operator=(const Feld& lFeld); int top()const; int first()const; int at(int index); void pushBack(int digit); void pop(); int getSize()const; int operator[](int index); friend ostream& operator<<(ostream& ostr,const Feld& lFeld); friend istream& operator>>(istream& istr,const Feld& lFeld); string GetLastError(); private: int m_index; int* m_data; int m_size; string m_errormsg; }; Feld::Feld(int size, int initDigit) { m_data = new int[size]; for(int i = 0; i < size; ++i) m_data[i] = initDigit; m_size = size; m_index = -1; } Feld::Feld(const Feld& lFeld) { m_data = new int[lFeld.m_size]; m_size = lFeld.m_size; m_index = lFeld.m_index; for(int i = 0; i < m_size; ++i) m_data[i] = lFeld.m_data[i]; } Feld::~Feld() { delete[] m_data; m_data = 0; m_index = -1; m_size = 0; } Feld::Feld& operator=(const Feld& lFeld) { if(this!=&lFeld) { delete[] m_data; m_size = 0; m_index = -1; m_size = Feld. } }Error: Operator muss als Funktion deklariert sein (wohl der operator=)
aber wie meint er das??
sonst noch ein paar tipps?
-
"Wohl der operator="? Sollten wir das besser wissen als Du? Hast evtl. Bock, die Zeilennummer des Fehlers auch zu posten?
Der Rückgabewert des operator= ist Feld&, und die Methode heisst Feld::operator=, bei Dir ist der Rückgabewert Feld::Feld& und die Bezeichnung der Klasse fehlt dafür im Namen der Methode. Eigentlich musst Du anfangs der Zeile nur :: und & vertauschen

-
Schlag mich wenn es falsch ist aber... muss da nicht viel mehr "Feld::" sein?
etwa so:Feld::Feld& Feld::operator=(const Feld::Feld& lFeld) { if(this!=&lFeld) { delete[] m_data; m_size = 0; m_index = -1; m_size = Feld. } }
-
Der Knirps schrieb:
Schlag mich wenn es falsch ist aber... muss da nicht viel mehr "Feld::" sein?
etwa so:Feld::Feld& Feld::operator=(const Feld::Feld& lFeld) { if(this!=&lFeld) { delete[] m_data; m_size = 0; m_index = -1; m_size = Feld. } }Was ist denn dieses Feld::Feld, das Du als Rückgabewert und Parameter deklarierst ?
Finde ich irgendwie nicht (müsste ja ein Typ sein)...Gruß,
Simon2.
-
NEIN *prügel*

Nein, mit Feld::xyz bezeichnest Du ein Mitglied (Methode, Attribut, Typ) des Scopes (Klasse, Namespace) Feld. Der Rückgabewert von operator= ist aber doch ein Objekt der Klasse Feld, nicht ein Objekt vom Typ Feld innerhalb des Scopes Feld.
Feld& /* Typ der Rückgabe, Referenz auf Feld */ Feld:: /* Mitglied der Klasse Feld */ operator=( const Feld& /* Typ des Parameters, Referenz auf Feld */ )
-
sorry
fehler kommt hier:
IntFeld::IntFeld& operator=(const IntFeld& Feld)Feld ist meine Klasse, und das sollte eigentlich der zuweisungsoperator werden...
wie mach ich es denn richtig?
-
So wie ich es (bereits zwei mal) beschrieben habe. IntFeld& ist der Rückgabetyp (steht vorne) und IntFeld::operator= der Name der Methode (steht hinter dem Rückgabetyp).
-
oops, hab es leider nicht so richtg verstanden, klappt jetzt aber!
Danke