Ich möchte innerhalb einer Klasse ein Dateistrom-Objekt speichern und versuche das bisher so:
C++:
class MyClass { [...] private: ifstream mSourceStream; [...] };
// Im Konstruktor wird dann an die Datei gebunden... MyClass::MyClass () { [...] ifstream mSourceStream("test.in", ios::in); [...] }
// Nun versuche ich in einer anderen Methode, auf die Datei zuzugreifen... MyClass::aMethod () { char c; while (!mSourceStream.eof()) { mSourceStream.get() >> c; cout << c; } }
Nur leider scheint dann in der Methode "aMethod" der Zugriff auf den Dateistrom nicht mehr moeglich, es wird nichts ausgegeben. Wenn ich hingegen den gleichen Code zur Ausgabe im K'tor einsetze, funktioniert alles wunderbar.
Du deklarierst im Konstruktor ein lokales Objekt mit Namen mSourceStream, das die gleichnamige Membervariable überdeckt. Das Member mSourceStream bleibt uninitialisiert und funktioniert darum in aMethod nicht.
Versuch mal was in der Art:
C++:
MyClass::MyClass () : mSourceStream ("test.in", ios::in) // Member über Initialisierungsliste einrichten. { }
Du deklarierst im Konstruktor ein lokales Objekt mit Namen mSourceStream, das die gleichnamige Membervariable überdeckt. Das Member mSourceStream bleibt uninitialisiert und funktioniert darum in aMethod nicht.
Argh, klar. Mit der Initialisierungsliste funktioniert es natürlich!
Danke für die Entfernung des Brettes vor meinem Kopf ;-)