NEWBIE: Wert zurückgeben, der im Konstruktor initialisiert wird
-
Hallo,
ich habe eine Klasse in der via einer Methode (GetItsVal()) ein Wert zurückgegeben werden soll, welcher automatisch im Initialisierungsbereich des Konstruktors erstellt wird und private ist, doch irgendwie klappt das nicht so ganz.
Würde ich hingegen eine Methode schreiben, die einen Parameter übernimmt, zuweist und diesen dann zurückgibt, dann funktioniert es.
Was mache ich falsch?
Vielen Dank für eure Hilfe!
#include <iostream> using namespace std; class Counter { public: Counter(); ~Counter(){} int GetItsVal() const { return itsVal; } operator int(); private: int itsVal; }; Counter::Counter(): itsVal(24) {} Counter::operator int() { return (int (itsVal)); } int main() { Counter ctr(); cout << "Counter Object Val: " << ctr.GetItsVal() << endl; return 0; }ERROR:
29: error: request for member `GetItsVal' in `ctr', which is of non-class type `Counter ()()'
-
int main() { Counter ctr;//ohne () cout << "Counter Object Val: " << ctr.GetItsVal() << endl; return 0; }
-
sirvenue schrieb:
Counter ctr();Hier erstellt du kein Objekt vom Typ Counter. Dies ist eine Funktionsdeklaration mit Rückgabetyp Counter, Name ctr und keinem Parameter.
Counter ctr;Das sollte dein Problem beheben.
Btw:
Ändere Operator int etwas abCounter::operator int() const { return itsVal; }
-
Counter::Counter():
itsVal(24)
ich verstehe die Zeile nicht, hab so was noch nie gesehen
kannst mir mal erklären was du da treibst?
Es gibt zwar so was ähnliches wenn man eine klasse von einer anderen
ableitet und dann den konstruktor von der klasse aufruft aber in
der form wie bei dir hab ich das noch nie gesehen
-
Counter::Counter():itsVal(24)Das nennt man Initialisierungsliste und man weist damit den Attributen des Objektes
werte zu. in diesem Fall wird mit der Konstruktion des Objektes sein itsVal mit 24 initalisiert.
-
Hi,
das ist die initialisierungsliste. In der werden wie der name schon gesagt member initialisiert.
-
Hallo rene1,
Counter::Counter() : itsVal(24) {}Dies initialisert die Member-Variable "itsVal" mit dem entsprechenden Wert.
Man kann auchCounter::Counter() { itsVal = 24; }schreiben, so wie du es wahrscheinlich kennst.
Für konstante Member bzw. Referenzen muß man aber immer die obere Form wählen (wie bei Aufruf eines Basis-Konstruktors).