Destruktor Frage...
-
Ich möchte gerne ein Programm schreiben, welches eine Textdatei analysiert. Ein Teil soll ein Objekt enthalten, an das ich eine Zahl übergebe. Dieses Objekt soll mir dann die Zeilennummer der Textdatei ausgeben.
So hab ich das gemacht:
// currentfile.h #ifndef _CURRENTFILE_H #define _CURRENTFILE_H #include <string> #include <fstream> #include <vector> class CurrentFile { public: CurrentFile(const string& file); ~CurrentFile(); const string getLine(int col) { cout << Contents[col] << endl; } private: ifstream FileIn; vector<string> Contents; }; #endif
//currentfile.cpp #include "currentfile.h" #include <iostream> #include <fstream> #include <vector> #include <string> #include <iterator> using namespace std; CurrentFile::CurrentFile(const string& file) { ifstream FileIn(file.c_str()); // Datei öffnen for (string ReadString; getline(FileIn, ReadString); ) // in einen Vector packen Contents.push_back(ReadString); } CurrentFile::~CurrentFile() { cout << "Dtor" << endl; Contents.clear(); }
//main.cpp #include "currentfile.h" #include <iostream> #include <fstream> #include <vector> #include <string> #include <iterator> #include "currentfile.h" using namespace std; int main() { CurrentFile currentfile("httpd_test.conf"); cout << "Bitte Zeile eingeben:"; int colNr = 0; cin >> colNr; currentfile.getLine(colNr); }
Beim Start wird eine Zeilenummer gefragt, die er auch ausgibt. Allerdings stürtz das Programm danach direkt ab. Kann mir da einer helfen?
-
Mehreres:
- du hast eine Membervariable FileIn, benutzt sie jedoch nicht. Dein Konstruktor legt eine lokale Variable FileIn an, und arbeitet damit.
- dein Destruktor tut nichts, bzw. nicht sinnvolles. Der Vektor muss nicht gecleart werden bevor er automatisch zerstört wird.
- du testest nicht, ob die Datei geöffnet werden konnte
- getLine gibt laut Deklaration einen string zurück, ich seh jedoch nirgends ein return. Warnt dein Compiler nicht? BTW *könnte* das die Absturzursache sein.
- im Header benutzt du Namen aus std, ohne den Namensraum anzugeben.
-
- getLine gibt laut Deklaration einen string zurück, ich seh jedoch nirgends ein return. Warnt dein Compiler nicht? BTW *könnte* das die Absturzursache sein.
Ersetze "könnte" durch "war" und streiche "sein."
Das wars, muchas gracias.