TinyXml und C++
-
Hallo zusammen,
ich habe folgendes problem.
Das ist mein Klassen definition.#ifndef CMAP_H #define CMAP_H #include <tinyxml.h> #include "CDialog.h" #include "CSprite.h" #include <iostream> class CMap { public: CMap(); void LoadMap(std::string tmp); void RenderMap(); virtual ~CMap(); protected: private: TiXmlElement* child; std::string name; CSprite *p_Sprite[]; TiXmlElement* state_x; TiXmlElement* state_y; TiXmlElement* state_name; int x,y; };Das ist mein C++ Datei.
#include "../include/CMap.h" CMap::CMap() { child = NULL; } void CMap::LoadMap(std::string tmp) { TiXmlDocument doc(tmp); if(doc.LoadFile() != true) { CDialog::DrawErrorMessage("Could not load map"); } TiXmlHandle docHandle(&doc); child = docHandle.FirstChild( "Scene" ).FirstChild( "Sprite" ).ToElement(); } void CMap::RenderMap() { for( child; child; child=child->NextSiblingElement() ) { state_x = child->FirstChild("x")->ToElement(); x = atoi(state_x->GetText()); state_y = child->FirstChild("y")->ToElement(); y = atoi(state_y->GetText()); state_name = child->FirstChild("image")->ToElement(); } } CMap::~CMap() { //dtor }Dies ist meine XML datei die ich versuche auszulesen.
<Scene> <Sprite> <x>162</x> <y>157</y> <image>test0.png</image> </Sprite> <Sprite> <x>370</x> <y>321</y> <image>test1.png</image> </Sprite> <Sprite> <x>646</x> <y>144</y> <image>test2.png</image> </Sprite> </Scene>Leider funktioniert das so nicht, es geht nur wenn ich den Teil aus RenderMap()
mit in LoadMap(string) rein packe.
Für mich sieht es so aus als hätte er mit child ein problem.
Kann mir eventuel jemand sagen was ich falsch mache?Gruß der Anfänger
-
Wie rufst du denn die Funktionen auf? Und was genau funktioniert nicht?
-
Dein doc überlebt LoadMap nicht (wird am Ende zerstört). Das löscht alle Nodes, somit ist die interne Repräsentation des XML dahin. Zugriff auf trotzdem gespeicherte Node -> BUMM!