Dag tweakers! Klaar voor nog een beginnersvraag over C++?
Ik heb momenteel een programma hiërarchisc met objecten opgebouwd (World -> Speler -> Skills -> ...) waarbij ik bij elk paar objecten op een design-probleem stuit. Om het probleem te vereenvoudigen behandel ik enkel de 2 top klassen: World en Speler. Het World object heeft tal van data en routines, en ook een lijst met spelers (pointers naar objecten van het type Speler). Het object Speler staat in voor alles wat de speler doet, en heeft dus ook functies zoals move(), ...
Maar om een Speler te kunnen doen bewegen (move()), moet ik toegang hebben tot zijn parent class, de World dus. En dat laatste lukt me dus maar niet
Ik had er aan gedacht om de klasse Speler een pointer naar zijn parent te geven (World* parent), maar dat zorgt voor een kruisverwijzing: om een pointer van het type World te maken moet ik "world.h" includen, wat niet wil lukken aangezien ik in het object World een lijst std::list<Speler*> gedefiniëerd heb.
Is dit een design fout, of kan dit syntaxisch opgelost worden? de move() call verhuizen naar het World object zou alles oplossen, maar dat kan ik niet doen omdat hetzelfde probleem zich op lagere lagen nog voordoet, en dan kan ik niet zo even de routine verhuizen.
Ik heb ook nog voorbeelden tegengekomen die gebruik maken van de "class A:public B" syntax, maar dat werkte ook niet direct, AFAIK ook door deze kringverwijzing.
Alvast bedankt,
maleadt
Ik heb momenteel een programma hiërarchisc met objecten opgebouwd (World -> Speler -> Skills -> ...) waarbij ik bij elk paar objecten op een design-probleem stuit. Om het probleem te vereenvoudigen behandel ik enkel de 2 top klassen: World en Speler. Het World object heeft tal van data en routines, en ook een lijst met spelers (pointers naar objecten van het type Speler). Het object Speler staat in voor alles wat de speler doet, en heeft dus ook functies zoals move(), ...
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| class World { public: World(); ~World(); private: std::list<Speler*> dataSpelers; }; class Speler { public: Speler(); ~Speler(); World* parent; move(); private: std::list<Skills*> dataSkills; |
Maar om een Speler te kunnen doen bewegen (move()), moet ik toegang hebben tot zijn parent class, de World dus. En dat laatste lukt me dus maar niet
Is dit een design fout, of kan dit syntaxisch opgelost worden? de move() call verhuizen naar het World object zou alles oplossen, maar dat kan ik niet doen omdat hetzelfde probleem zich op lagere lagen nog voordoet, en dan kan ik niet zo even de routine verhuizen.
Ik heb ook nog voorbeelden tegengekomen die gebruik maken van de "class A:public B" syntax, maar dat werkte ook niet direct, AFAIK ook door deze kringverwijzing.
Alvast bedankt,
maleadt