[DummyModeOn] Last in First out Stack
-
wie schreibe ich einen Last in First out Stack ich hab schon eine weile im Inet gesucht aber keine Beispiel gefunden was ich verstanden hab wie ich so einen Stack schreibe gefunden hab ich das verstehe ich auch denk ich aber mein Compilier hat da zu haufen fehler meldungen die ich wieder mal nicht verstehe
#include <iostream> using namespace std; class Stack { public: Stack(): top(0){} ~Stack(){} void push(int a); int pop(); private: static const int max_size = 17; int data[max_size]; int top; }; void main() { int awert; Stack rechner; rechner.push(4); cin >> awert; rechner.push(awert); cout << rechner.pop() << "\n"; cout << rechner.pop() << "\n"; }
E:\cpp\stack_test\test_stack.cpp(12) : error C2258: Ungueltige Syntax fuer rein virtuelle Methode; '= 0' erforderlich
E:\cpp\stack_test\test_stack.cpp(12) : error C2252: 'max_size' : Nur Funktionen koennen rein virtuell deklariert werden
E:\cpp\stack_test\test_stack.cpp(13) : error C2065: 'max_size' : nichtdeklarierter Bezeichner
E:\cpp\stack_test\test_stack.cpp(13) : error C2057: Konstanter Ausdruck erwartet
E:\cpp\stack_test\test_stack.cpp(13) : warning C4200: Nicht dem Standard entsprechende Erweiterung : Null-Feld in Struktur/Union
E:\cpp\stack_test\test_stack.cpp(14) : error C2229: class 'Stack' enthaelt ein Feld mit der unzulaessigen Groesse 0könnte mir jemand da helfen
thx for help
-
Du musst max_size außerhalb der Klasse definieren, ich denke, dann werden die Fehler verschwinden.
-
Du musst max_size außerhalb der Klasse definieren, ich denke, dann werden die Fehler verschwinden
Nein static const Variablen in einer Klasse dürfen in der Klasse initialisirt werden. Und sind dann auch konstant das heist dürfen als array size benutzt werden.
Allerdings scheint es mir, als ob dein compiler nicht standard gerecht ist und das nicht weis. Versuch mal einen Enumhack:
class Stack { public: Stack(): top(0){} ~Stack(){} void push(int a); int pop(); private: enum{ max_size=17 }; int data[max_size]; int top; };
-
Hi,
das man const-Variablen in der Klasse initialisieren darf, ist glaube ich entweder ein Unterschied zwischen ISO- und ANSI-Standard oder eine Microsoft-Erweiterung in ihren Compilern.
Irgendsowas in der Richtung hab' ich mal gehört...ChrisM
-
ChrisM schrieb:
das man const-Variablen in der Klasse initialisieren darf, ist glaube ich entweder ein Unterschied zwischen ISO- und ANSI-Standard oder eine Microsoft-Erweiterung in ihren Compilern.
Irgendsowas in der Richtung hab' ich mal gehört...Na da hast du wohl was falsches gehört. Statische integrale Konstanten dürfen innerhalb der Klassendefinition initialisiert werden. Und zwar laut
ISO/IEC 14882 dem Internationalen C++ Sprachstandard.
-
mm aus der 6 fehler sind 3 geworden nicht ich überhaupt nicht verstehe
test_stack.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall Stack::pop(void)" (?pop@Stack@@QAEHXZ)
test_stack.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall Stack::push(int)" (?push@Stack@@QAEXH@Z)
Debug/stack_test.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.btw. ich nutz visual c++
-
Du hast die Funktionen nicht definirt
-
Hi,
HumeSikkins schrieb:
Na da hast du wohl was falsches gehört. Statische integrale Konstanten dürfen innerhalb der Klassendefinition initialisiert werden. Und zwar laut
ISO/IEC 14882 dem Internationalen C++ Sprachstandard.aber kann es sein, dass der VC++ es erlaubt, nicht-statische konstante Elemente trotzdem direkt in der Klasse zu initialisieren, obwohl man dies eigentlich in der Konstruktorinitialisierungsliste tun müsste?
Ich glaub, so war das...ChrisM
-
ChrisM schrieb:
aber kann es sein, dass der VC++ es erlaubt, nicht-statische konstante Elemente trotzdem direkt in der Klasse zu initialisieren, obwohl man dies eigentlich in der Konstruktorinitialisierungsliste tun müsste?
Ich glaub, so war das...Der VC++ 6.0 erlaubt weder das eine noch das andere. Wie das bei anderen Versionen ist, kann ich dir nicht sagen.
-
total verwirtt bin und wie kann ich dieses problem da lösen ( benutz vc6)
-
definier die Funktionen
mfg
Glamdring