026
31.10.2008, 23:04 Uhr
Lensflare
|
Also syntaktische Fehler sind hier nicht drin denke ich. Mein Compiler hat alles fehlerfrei kompiliert. Bist du sicher, dass du auch Syntaxfehler meintest?
Die Datei Funktion.cpp sollte stack.cpp heissen. Normalerweise ist es so, dass man eine Klasse in eine .h und eine .cpp aufteilt wobei der Name der beiden Dateien dem Klassennamen entspricht.
Dann solltest du wie schon erwähnt Konstruktoren und Destruktoren verwenden. aus
C++: |
char* Stack::createStack(unsigned int n) void Stack::destroyStack()
|
wird
C++: |
Stack::Stack(unsigned int n) //Konstruktor Stack::~Stack() //Destruktor
|
Den Inhalt der beiden Methoden kannst du eigentlich übernehmen.
Dann wird der Konstruktor automatisch aufgerufen wenn du das Objekt erzeugst und der Destruktor, wenn es zerstört wird:
C++: |
{ Stack s(3); //Konstruktor wird aufgerufen } //hier wird der Destruktor aufgerufen, weil der Scope verlassen wird
|
und dann, wie du richtig gemerkt hast, ist es besser den content als array zu behandeln und nicht als zeiger, den man inkrementiert und dekrementiert, wenn man sich schon den Index des höchsten Elements merkt.
Du hast in createStack top auf n gesetzt und depth auf 0. deswegen gehe ich davon aus, dass top die maximale Höhe des und depth die Höhe des aktuell höchsten Elements ist.
dann würden die Methoden so aussehen:
C++: |
void Stack::push(char c){
if(depth < top){ content[depth] = c; depth++; cout << "Hinzugefuegt" << endl; } else{ cout << "Stack ist voll!" << endl; } }
char Stack::pop(){
if(depth>0){ depth--; char c = content[depth]; cout << "Herausgeholt: " << endl; return c; } else{ cout << "Stack ist leer" << endl; return 0; } }
int Stack::isEmpty(){
if(depth == 0){ return 0; }else{ return 1; } }
|
Noch einige Anmerkungen:
Vielleicht ist es nicht so gut, bei pop 0 zurückzugeben, falls der Stack leer ist. Denn 0 könnte ja auch ein gültiges Zeichen sein, das man gerade aus dem Stack geholt hat. Es ist ja nicht verboten 0 in den Stack zu pushen. Da verweise ich wieder an das was ao gesagt hat -> Das Zeichen über Referenzübergabe "herausholen"
Wäre es nicht besser, wenn isEmpty() bool anstelle von int zurückgeben würde? -- Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten. (Emerson Pugh Trost) Dieser Post wurde am 31.10.2008 um 23:08 Uhr von Lensflare editiert. |