Problems printing out using cout

Dear folks,

I hope that you guys can help me out!

I have this RingList template with a Person ( Persoon in my language, dutch ). When I want to print it out my command prompt stops working , or the output stops , even when I try to print something else behind it.

It's about the "toonAlles" and "toon(char geslacht)" function. Sorry for my dutch. Comments are in dutch to.

I use devc++ on a 32 bit windows vista machine.

Error : commandprompt stops working, crashes
how to reproduce : just run the code below

It works fine till here(according to output). I t crashes after this code:
1
2
3
4
5
6
7
// controleren of een persoon voorkomt
	if(persoonlijst.komtVoor(testp)){
		cout << "De persoon komt voor in deze lijst" << endl;
	}
	else{
		cout << "De persoon komt niet voor in deze lijst" << endl;
	}


Wanted behavior : To print the last list using the "toon(char geslacht)" function and work properly


Here is my code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#include <cstdlib>
#include <iostream>

using namespace std;

// template struct element
template <class T> struct element{
	// waarde van het element
	T object;
	
	// pointers naar elementen vorig en volgende onder het huidige element
	element *previous;
	element *next;
};

struct persoon{
	public:
		// Contructor voor een nieuwe sortedRingList
		persoon() { }
		
		void setVoornaam(string vo){
			voornaam = vo;
		}
		void setNaam(string na){
			naam = na;
		}
		void setLeeftijd(int le){
			leeftijd = le;
		}
		void setGeslacht(char ge){
			geslacht = ge;
		}
		
		string getVoornaam(){
			return voornaam;
		}
		string getNaam(){
			return naam;
		}
		int getLeeftijd(){
			return leeftijd;
		}
		char getGeslacht(){
			return geslacht;
		}	
		
		bool operator>(persoon &p2){
			if(naam == p2.getNaam()){
				return leeftijd > p2.getLeeftijd();
			}
			else{
				return naam > p2.getNaam();
			}
        }
        bool operator<(persoon &p2){
			if(naam == p2.getNaam()){
				return leeftijd < p2.getLeeftijd();
			}
			else{
				return naam < p2.getNaam();
			}
        }
		bool operator==(persoon &p2){
			return naam == p2.getNaam();
		}
		
    private:
    	string voornaam;
		string naam;
    	int leeftijd;
    	char geslacht;
};

template <class T> class sortedRingList{
	
	public:
		// Contructor voor een nieuwe sortedRingList
		sortedRingList() { 
			pointer = NULL; 
            aantalObjecten = 0;
		}
		
		// Destructor om het geheugen van sortedRingList weer vrij te geven
		~sortedRingList()
		{
			element<T> *p;
			while (pointer != NULL){
				p = pointer;
				pointer = pointer->next;
				delete p;
			}
		}
		
		// lidfunctie om een element gesorteerd toe te voegen aan sortedRingList
		void voegGesorteerdToe(T x);
		
		// lidfunctie om een element uit de sortedRingList weg te laten.
		void laatWeg(T x);
		
		// lidfunctie om de data uit sortedRingList te tonen
		void toonAlles();
		
		// lidfunctie om te controleren of een element voorkomt in de sortedRingList
		bool komtVoor(T x);
		
		// lidfunctie om te selecteren op geslacht
		sortedRingList<T> select(char geslacht);
		
		// lidfunctie om alle personen van een geslacht te tonen
		void toon(char geslacht);
		
		int getAantalObjecten(){
			return aantalObjecten;
		}
		void setAantalObjecten(int aantal){
			aantalObjecten = aantal;
		}
		
		void vermeerderAantal(){
			aantalObjecten++;
		}
		void verminderAantal(){
			aantalObjecten--;
		}
		
		private:
    		element<T> *pointer;
			int aantalObjecten;
};

// lidfunctie om een element gesorteerd toe te voegen aan sortedRingList
template <class T> void sortedRingList<T>::voegGesorteerdToe(T x) {
	bool ingevoegd = false;
	element<T> *p = pointer;
	
	if (pointer == NULL || x < p->object) {
		pointer = new element<T>;
		pointer->object = x;
		pointer->next = p;
		pointer->previous = p;
		sortedRingList<T>::vermeerderAantal();
	} 
	else {
		element<T> *newelement = new element<T>;
		newelement->object = x;
        newelement->next = pointer;
		element<T> * previous = p;
		p = p->next;
		
		while (!ingevoegd && p!= NULL) {
			if (x < p->object) {
				newelement->next = p;
				newelement->previous = previous;
				previous->next = newelement;
				p->previous = newelement;
				ingevoegd = true;
				
			}		
			previous = p;
			p = p->next;
		}
		
		if (!ingevoegd) {
			newelement->previous = previous;
			previous->next = newelement;
		}
		else{
			sortedRingList<T>::vermeerderAantal();
		}
	}
};

// lidfunctie om de sortedRingList te sorteren
template <class T> void sortedRingList<T>::laatWeg(T x) {
	element<T> *p = pointer;
	if (pointer != NULL) {
		if (p->object == x) {
			pointer = p->next;
			sortedRingList<T>::verminderAantal();
		}
		p = pointer;
		element<T> *previous = p;
		p = p->next;
		while (p != NULL){
			if (p->object == x) previous->next = p->next;
			else previous = p;
			p = p->next;
		}
	}
};


// tonen van elementen
template <class T> void sortedRingList<T>::toonAlles() {
    int teller = 0;
    // toon het element en zet het element naar het volgende element
	for (element<T> *p = pointer; p != NULL && teller < sortedRingList<T>::getAantalObjecten(); p = p->next) {
		cout << p->object.getVoornaam() << " " << p->object.getNaam() 
        << " | Leeftijd :" << p->object.getLeeftijd() << 
        " | Geslacht :" << p->object.getGeslacht() << endl;
		teller ++;
	}
};

// tonen van specifieke geslacht elementen
template <class T> void sortedRingList<T>::toon(char geslacht) {
    int teller = 0;
    // toon het element en zet het element naar het volgende element
	for (element<T> *p = pointer; p != NULL && teller < sortedRingList<T>::getAantalObjecten(); p = p->next) {
		if( p->object.getGeslacht() == geslacht){
			cout << p->object.getVoornaam() << " " << p->object.getNaam() 
			<< " | Leeftijd :" << p->object.getLeeftijd() << 
			" | Geslacht :" << p->object.getGeslacht() << endl;
		}
		teller ++;
	}
	cout << endl;
};

// maak lijst met enkel bepaalde geslacht
template <class T> sortedRingList<T> sortedRingList<T>::select(char geslacht) {
	sortedRingList<T> specifiekelijst;
    int teller = 0;
	for (element<T> *p = pointer; p != NULL && teller < sortedRingList<T>::getAantalObjecten(); p = p->next) {
		if( p->object.getGeslacht() == geslacht){
			specifiekelijst.voegGesorteerdToe(p->object);
		}
		teller++;
	}
	return specifiekelijst;
}

// Controleren of een element voorkomt
template <class T> bool sortedRingList<T>::komtVoor(T x) {
	bool present = false;
	element<T> *p = pointer;
	while ( p != NULL && !present) {
		if (p->object == x) {
			present = true;
        }
		p = p->next;
	}
	return present;
}


int main(){
	// Eerste lijst aanmaken en wat basisbewerkingen uitvoeren
	sortedRingList <persoon> persoonlijst;

	// testpersonen toevoegen
	persoon p1;
	persoon p2;
	persoon p3;
	
	p1.setVoornaam("Sam");
	p1.setNaam("Vloeberghs");
	p1.setLeeftijd(21);
	p1.setGeslacht('m');
	
	p2.setVoornaam("Lennie");
	p2.setNaam("Dupont");
	p2.setLeeftijd(17);
	p2.setGeslacht('v');
	
	p3.setVoornaam("Greet");
	p3.setNaam("Krekels");
	p3.setLeeftijd(50);
	p3.setGeslacht('v');
	
	persoonlijst.voegGesorteerdToe(p1);
    persoonlijst.voegGesorteerdToe(p2);
	persoonlijst.voegGesorteerdToe(p3);

	cout << "Lijst van personen: " << endl; persoonlijst.toonAlles();
	persoonlijst.laatWeg(p1);
	cout << endl; 
    cout << "Lijst van persoon na verwijderen van een persoon: " << endl; persoonlijst.toonAlles();
		cout << endl; 
	persoon testp;
	
	testp.setVoornaam("Lennie");
	testp.setNaam("Dupont");
	testp.setLeeftijd(17);
	testp.setGeslacht('v');
	
	// controleren of een persoon voorkomt
	if(persoonlijst.komtVoor(testp)){
		cout << "De persoon komt voor in deze lijst" << endl;
	}
	else{
		cout << "De persoon komt niet voor in deze lijst" << endl;
	}
	cout << endl;
	persoonlijst.toon('v');
	sortedRingList <persoon> persoonlijstgeslacht;
	persoonlijstgeslacht = persoonlijst.select('v');
	// cout << "Lijst van persoon na selecteren op geslacht 'v': "; persoonlijstgeslacht.toonAlles();
	// cout << endl; 
	
	system("PAUSE");
	return EXIT_SUCCESS;
}

Last edited on
Topic archived. No new replies allowed.