Zeiger auf Objekt in Vektor speichern
-
Aedyn schrieb:
Ob das Ableiten so gut ist? Ich weiß nicht so recht. Wenn ich dann mit XML arbeite, geht das dann überhaupt noch
Nein, das geht dann natürlich nicht. Aber wie "User--" schon gesagt hat,
solltest du meine Methode nur bei kleineren Projekten verwenden.
-
Eben, ich möchte aber gleich eine Methode, die man bei großen Projekten verwenden kann.
-
@ajax
#include <iostream> class CHealpotion { public: int GetObject() { return this; } void use() { } }; CHealpotion oHealpotion; void main() { int slot[5]; slot[0] = oHealpotion.GetObject(); }Das funktioniert nicht!
Weil:Error C2440: 'return' : 'class CHealpotion *const ' kann nicht in 'int' konvertiert werden
MfG,
Aedyn
-
Ich glaub die Meta-Metode solltest du noch etwas aufschieben, komm erstmal mit C++ klar (und da ist leo_s System wirklich ne super Übung) und dann kann man sowas immernoch machen.
Ich würde im Übrigen das Verhalten in XML einfach als embedded LUA machen (so wie es auch in world of warcraft der Fall ist).
-
Zu früh abgeschickt.
#include <iostream> class CHealpotion { public: int GetObject() { return this; } void use() { } }; CHealpotion oHealpotion; void main() { int slot[5]; slot[0] = oHealpotion.GetObject(); }Mach das mal so:
#include <iostream> class Item { public: virtual void use() = 0; }; class Healthpotion : public Item { public: virtual void use() { std::cout << "Player restores 50 hitpoints"; } }; int main() { Item* slots[ 15 ]; slots[ 0 ] = new Healthpotion; slots[ 0 ]->use(); delete slots[ 0 ]; }
-
Jo danke hat mir um einiges weitergeholfen. Stimmt, ich werde mich zunächst weiter in der Sprache üben.
Nun, eine Frage noch, was ist "embedded LUA" ?
Tatsächlich denke ich beim programmieren an World of Warcraft, solche Systeme zu entwickeln finde ich sehr interessant.
-
LUA ist einfach eine Skriptsprache, dazu findest bei google tonnenweise Infos und mit embedded meinte ich einfach, statt einem separaten lua-file den lua-code direkt in die XML-Datei zu schreiben.
-
Okay ich möchte es mal mit deinem Beispiel probieren.
Habe aber schon das Problem mit Zugriffen. Die Item und Healthpotion-Klasse sind in einem Header, die Player Klasse auch.main.cpp
#include <iostream> #include "main.h" void main() { Item* slots[15]; slots[0] = new Healthpotion; slots[0]->use(); delete slots[0]; }items.h
#ifndef _ITEMS_H_ #define _ITEMS_H_ class Item { public: virtual void use() = 0; }; class Healthpotion : public Item { public: virtual void use() { std::cout << "Player restores 50 hitpoints"; } }; #endifmain.h
#ifndef _MAIN_H_ #define _MAIN_H_ #include "items.h" class PLAYER { public: signed health; }; #endifWie kann ich von der use()-Funktion auf player.health zugreifen?
-
Du könntest der use-Funktion noch nen Parameter spendieren:
#ifndef _MAIN_H_ #define _MAIN_H_ #include "items.h" class PLAYER { public: signed health; }; #endif #ifndef _ITEMS_H_ #define _ITEMS_H_ class Item { public: virtual void use( PLAYER& entity ) = 0; }; class Healthpotion : public Item { public: virtual void use( PLAYER& entity ) { std::cout << "Player restores 50 hitpoints"; entity.health += 50; } }; #endif #include <iostream> #include "main.h" int main() { Item* slots[15]; slots[0] = new Healthpotion; PLAYER player; player.health = 30; slots[0]->use( player ); delete slots[0]; }Statt PLAYER könntest du auch ne Basisklasse machen die für alle Charaktere im Spiel gültig ist, dann können NPCs auch Gegenstände verwenden/besitzen.
-
d:\c++\rpgtest\items.h(7) : error C2061: Syntaxfehler : Bezeichner 'PLAYER'
d:\c++\rpgtest\items.h(13) : error C2061: Syntaxfehler : Bezeichner 'PLAYER'
d:\c++\rpgtest\main.cpp(13) : error C2660: 'use' : Funktion akzeptiert keine 1 Parameter
-
Du musst im Item-Header die PLAYER-Klasse sichtbar machen, dazu musst den entsprechenden Header inkludieren.