Значит задание такое, занести элементы из файла в стек, потом прочитать и удалить. Вот исходник. Не могу понять, почему не работает FifoClass& FifoClass::operator >>(string& str); FifoClass::operator string(); FifoClass::~FifoClass();
main
| Код | /************************************************************************** FifoClassTest_1.h
Testen der Container-Klasse mit Fifo-Eigenschaften
Dr. B. Lang, FH OS 12.04.2001: Erste Version 24.03.2003: Ueberarbeitung fuer OOP-Praktikum SS2003 19.03.2004: Angepasst an GNU 3.xx Compiler 23.03.2005: Ueberarbeitung fuer OOP-Praktikum SS2005 31.03.2006: Nun werden Referenzen von FifoClass gefangen
To Do: - nichts bekannt /*************************************************************************/ #include<iostream> using namespace std; #include "FifoClass.h"
// // Testprogramm: Textdatei bitte als Argument ьbergeben // int main(int argc, char *argv[]) {
// // Normaler Betrieb // cout << "*** Zunaechst wird der normale Betrieb der Fifo-Klasse abgetestet ***" << endl; try { cout << "> Fifo aus Textdatei fuellen" << endl; FifoClass s( (argc>1) ? argv[1] : "test.txt" ); // Fifo einrichten und aus Textdatei fьllen cout << "> Fifo ausgeben" << endl; while (s>0) { // Elemente ausgeben cout << static_cast<string>(s) << endl; } cout << "> Fifo mittels Ein- und Ausgabeoperator fuellen" << endl; s << "One"; s << "Two"; s << "Three"; cout << "> Fifo ausgeben" << endl; string help; s >> help; cout << help << endl; s >> help; cout << help << endl; s >> help; cout << help << endl; } catch (FifoClass& f) { cout << "> Failure: Fifo Objekt sollte hier keine Ausnahme werfen:" << endl; cout << " >>> " << f.Error() << endl; return 3; } catch (...) { cout << "> Failure: Unbekannte Ausnahme" << endl; return 3; }
// // Fifo Unterlauf testen // cout << "*** Es werden nun Fifo-Unterlaeufe passieren ***" << endl; { FifoClass s; // Leeres Fifo einrichten try { cout << static_cast<string>(s) << endl; } catch (FifoClass& f) { cout << "> Erwartete Ausnahme wegen Fifo-Unterlauf:" << endl; cout << " >>>> " << f.Error() << endl; } catch (...) { cout << "> Failure: Unbekannte Ausnahme" << endl; return 3; } try { string help; cout << "> Fifo mittels Ein- und Ausgabeoperator fuellen" << endl; s << "Eins"; s << "Zwei"; s << "Drei"; cout << "> Fifo ausgeben und Unterlauf herbeifuehren" << endl; s >> help; cout << help << endl; s >> help; cout << help << endl; s >> help; cout << help << endl; s >> help; cout << help << endl; // Hier muss ein Unterlauf passieren } catch (FifoClass& f) { cout << "> Erwartete Ausnahme wegen Fifo-Unterlauf:" << endl; cout << " >>>>> " << f.Error() << endl; } catch (...) { cout << "> Failure: Unbekannte Ausnahme" << endl; return 3; } }
// // Test auf Fehler beim Datei-oeffnen // cout << "*** Es wird nun eine Ausnahme wegen nicht existierender Datei passieren ***" << endl; try { FifoClass s( "DieDateiGibtsNicht" ); // Fifo einrichten und aus Datei fьllen } catch (FifoClass& f) { cout << "> Erwartete Ausnahme wegen nicht existierender Datei:" << endl; cout << " >>> " << f.Error() << endl; } catch (...) { cout << "> Failure: Unbekannte Ausnahme" << endl; return 3; } return 0; }
|
FifoClass.h
| Код | using namespace std;
class FifoClass { private:
class Stack { public: string line; Stack *next; Stack(string str); ~Stack(); };
unsigned int counter; Stack *root; char* err;
public: FifoClass(); FifoClass(const char*); ~FifoClass();
FifoClass & operator<<(const string&); FifoClass & operator>>(string&); operator string(); operator int() const; const char* Error() const; FifoClass& push(const string&); FifoClass& pop(string&); };
|
FifoClass.cpp
| Код | #include<iostream> #include <fstream> #include "FifoClass.h"
using namespace std;
//-----------------------------------------------------------------------------
FifoClass::FifoClass() { root = NULL; counter = 0; }
//-----------------------------------------------------------------------------
FifoClass::FifoClass(const char* datName) { root = NULL; counter = 0; string row; ifstream aus(datName);
if (!aus.is_open()) { cout << "Fehler" << endl; throw *this; }
while (!aus.eof()) { getline(aus, row, '\n'); *this << row; } }
//-----------------------------------------------------------------------------
FifoClass& FifoClass::operator <<(const string& str) {
return push(str); }
//-----------------------------------------------------------------------------
FifoClass& FifoClass::push(const string& val) {
Stack *element, *temp;
try { element = new Stack(val); counter++; } catch (bad_alloc) { err = "Kein Speicher vorhanden"; throw *this; } if (NULL == root) { root = element; } else { temp = root; while (NULL != temp->next) temp = temp->next; temp->next = element; //cout << temp->line << endl; }
return *this; }
//-----------------------------------------------------------------------------
FifoClass& FifoClass::operator >>(string& str) {
Stack *temp;
if (counter == 0) { err = "Stack underfloww"; throw *this; } str = root->line;
temp = root; root = root->next; delete temp; counter--;
return *this; }
//-----------------------------------------------------------------------------
FifoClass::operator string() {
string tempStr; Stack *temp;
if (counter == 0) { err = "Stack underflow"; throw *this; } tempStr = root->line;
temp = root->next; delete root; root = temp; counter--;
return tempStr; }
//-----------------------------------------------------------------------------
FifoClass::operator int () const { return counter; }
//-----------------------------------------------------------------------------
FifoClass::~FifoClass() {
Stack *current = NULL, *to_del = root; while (to_del != NULL) { current = current->next; cout << "Del El= " << to_del->line << endl; delete to_del; to_del = current; } root = NULL;
}
//-----------------------------------------------------------------------------
FifoClass::Stack::~Stack() {
}
//-----------------------------------------------------------------------------
FifoClass::Stack::Stack(string str) { line = str; next = NULL; }
//-----------------------------------------------------------------------------
const char* FifoClass::Error() const{ return err; }
|
БОЛЬШОЕ СПАСИБО, ЕСЛИ У КОГО НАЙДЕТСЯ МИНУТКА ПОКОВЫРЯТЬСЯ В КОДЕ!  |