Probleme mit Stack und Klasse

WorldRacer

Erfahrenes Mitglied
Hi...Habe einen Stack Programmiert, der auch so einwandfrei funktioniert...

Will diesen aber als Member einer Klasse definieren... das geht ja normalerweise so:
Code:
int main() {
unsigned long SIZE=144;
Stack stack(SIZE);
}

wenn ich aber die unsigned long in die Klassendeklaration schreiben möchte, kann ich es nicht, da ja eine initialisierung bei der deklaration nicht erlaubt ist. Der Stack soll aber bei der Deklaration schon definiert werden. Also hab ich folgendes gemacht:

Code:
class Kartenspiel
{
public:
	
	Stack kartenstapel(144);
	Kartenspiel(void);
	
};

Funktioniert nicht. Fehlermeldung:

1>c:\dokumente und einstellungen\marco\eigene dateien\visual studio 2008\projects\mein mao mao\mein mao mao\kartenspiel.h(59) : error C2059: Syntaxfehler: 'Konstante'

Ich weiss nicht wie ich es lösen soll...
Danke im Vorraus
 
Wie Online-Skater schon erwähnt hat, ist der Konstruktor dafür zuständig, das würde dann so aussehen:
Code:
class Kartenspiel
{
public:
	
	Stack kartenstapel;
	Kartenspiel(void);
	
};
Kartenspiel::Kartenspiel() : kartenstapel(144) //Hier wird der Konstruktor vom STack aufgerufen
{
}
 
In diesem fall musst du es so machen, geht ja nicht anders.
Außerdem muss der Wert "144" übergeben wenn das Objekt erstellt wird, und das passiert wenn der Konstruktor von Kartenspiel aufgerufen wird.
Du könntest sogar im Konstruktor den Wert übergeben mit dem der Stack Initialisiert werden soll:
Code:
Kartenspiel::Kartenspiel(int size) : kartenspiel(size)
{
}

Eine andere methode wäre:
Stack *kartenstapel; zu deklarieren
und dan im Konstruktor mit new eine neue Instanz erstellen:
kartenspiel = new Stack(144);
im Destruktor muss dan aber auch:
delete kartenspiel; stehen.

mfg
Gene
 
Zuletzt bearbeitet:
alles klar, danke hatte nicht bedacht, das bei der deklaration einer klasse noch keine Klasse instanziert wird...

Aber hab noch ne Frage:

Wenn ich 4 Stacks habe, kann ich diese dann in einem Stack spiechern? also ich mein so:

Code:
Stack Stapel[4];
Stapel[1] = new Stack(20);
Stapel[2] = new Stack(20);
Stapel[3] = new Stack(20);
Stapel[4] = new Stack(20);
 
Man kann sowas natürlich machen, jedoch hätte ich da ein paar Verbesserungen zu deinem Code:
Code:
Stack* Stapel[4];
Stapel[0] = new Stack(20);
Stapel[1] = new Stack(20);
Stapel[2] = new Stack(20);
Stapel[3] = new Stack(20);

Dabei solltest du jedoch beachten, dass die einzelnen Stacks nicht wirklich auf dem Stapel gespeichert werden, sondern nur ihre Adresse.

Gruß Mickeyman.
 
Zurück