Forum: PC-Programmierung Stack dynamisch C++


von Marc (Gast)


Lesenswert?

Hallo zusamen, ich bin neu in C++ und habe noch ein paar 
Verständnisfragen. Als kleine Aufgabe soll ein Stack dynamisch für 
Zahlen erstellt werden. Hier mein Ansatz:
1
stack.h: 
2
3
4
class cStack{ 
5
6
friend int main(void); 
7
friend void showStack(cStack *Start); 
8
9
private: 
10
11
int top; 
12
double number; 
13
class cStack *next; 
14
class cStack *Start; 
15
16
public: 
17
18
cStack(void); //Konstruktor 
19
bool push(double number); 
20
double pop(void); 
21
int count(void); 
22
void drop(void); 
23
void swap(void); 
24
25
double get(int i); 
26
27
}; 
28
29
stack.cpp: 
30
31
#include"stack.h" 
32
#include<iostream> 
33
#include<stdio.h> 
34
35
#define TRUE 1 
36
#define FALSE 0 
37
38
cStack::cStack(void) 
39
{ 
40
number=0; 
41
42
Start=NULL; 
43
} 
44
45
bool cStack::push(double number) 
46
{ 
47
48
int Fehler=0; 
49
50
if(!Fehler) 
51
{ 
52
//next = new cStack; 
53
Start = (cStack*)malloc(sizeof(cStack)); 
54
55
if(Start==NULL) Fehler= -1; 
56
} 
57
58
if(!Fehler) (Start)->number= number; 
59
60
Start = Start->next; 
61
62
return true; 
63
64
} 
65
66
double cStack::pop(void) 
67
{ 
68
69
return 0; 
70
71
} 
72
73
int cStack::count(void) 
74
{ 
75
76
return 1; 
77
} 
78
79
void cStack::drop(void) 
80
{ 
81
82
} 
83
84
void cStack::swap(void) 
85
{ 
86
87
} 
88
89
double cStack::get(int i) 
90
{ 
91
92
return 0; 
93
94
} 
95
96
Rechner.cpp: 
97
98
#include<iostream> 
99
#include"stack.h" 
100
using namespace std; 
101
102
void showStack(cStack *Start); 
103
104
int main(void) 
105
{ 
106
int rueckgabe; 
107
108
cStack Stack; 
109
110
rueckgabe = Stack.push(18); 
111
112
Stack.push(9); 
113
114
//showStack(Stack.Start); 
115
116
cout << "Rueckgabe: " << rueckgabe <<endl; 
117
118
//cout << "Stack: " << Stack.Start->number <<endl; 
119
//hier habe ich versucht die erste Zahl auszugeben. 
120
121
system("PAUSE"); 
122
123
return 0; 
124
125
126
} 
127
//Diese Funktion soll für die Ausgabe dienen, aber ich bekomme immer eine Fehlermeldung und rufe sie in main nicht auf ;) 
128
void showStack (cStack *Start) 
129
{ 
130
while(Start){ 
131
132
cout << "Stack: " << Start->number << endl; 
133
Start = Start->next; 
134
} 
135
136
}
Ich habe Probleme den Stack auszugeben. Das Programm steht noch in den 
Grundzügen, somit sind noch nicht alle Methoden implementiert und das 
Error-Handling ist auch noch nicht fertig. Ich wäre sehr dankbar für 
eine Antwort :)

von Rene H. (Gast)


Lesenswert?

An der Formatierung musst auch noch etwas arbeiten.

Definiere Fehlermeldung!

von Rene H. (Gast)


Lesenswert?

Ah, hat sich erledigt. Ich kenn die Fehlermeldung.

Frage: wofür ist die Aufgabe?

von Marc (Gast)


Lesenswert?

Problem hat sich geklärt! :) ja einfach copy & paste aus meinem 
programm, habe vergessen es dann anzupassen.... Trotzdem danke

von Alex G. (alexx)


Lesenswert?

Hast du vor, einen Emulator zu programmieren?

von Karl H. (kbuchegg)


Lesenswert?

> Das Programm steht noch in den Grundzügen, somit sind noch nicht
> alle Methoden implementiert und das Error-Handling ist auch noch
> nicht fertig.

Wenns nur das wäre.
Die ganze Stack Klasse ist Unsinn.

Du musst unterscheiden zwischen dem Container (in deinem Fall 'der 
Stack') und den Werten, die du in diesem Container speicherst. Im Moment 
mischt du das fröhlich durcheinander.

Dein Listenhandling ist fehlerhaft.

malloc hat in einem C++ Programm (ausser wenn es um eine Schnittstelle 
zu C-Code geht) definitiv nichts verloren.

Um das Schlüsselwort 'friend' solltest du bei deinem Erfahrungsstand 
einen GROSSEN Bogen machen.

Und deine Formatierung ist tatsächlich grausam.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Die ganze Stack Klasse ist Unsinn.

Und gibt es schon fertig und erprobt ;-)
http://www.cplusplus.com/reference/stl/stack/

von Karl H. (kbuchegg)


Lesenswert?

Läubi .. schrieb:
> Karl Heinz Buchegger schrieb:
>> Die ganze Stack Klasse ist Unsinn.
>
> Und gibt es schon fertig und erprobt ;-)

:-)
Ich akzeptiere, dass es sich hier um eine Programmierübung handelt. 
Etwas das ich normalerweise immer unterstütze. Ich finde, dass jeder 
Informatiker mit dynamischen Datenstrukturen umgehen können muss. Du 
kannst mich dafür gerne 'altmodisch' nennen, aber ich finde so etwas 
trainiert das logisch methodische Denken. :-)
Für einen realen Einsatz nimmt man dann selbstverständlich die fertigen 
Klassen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.