c++ Tree implementierung mit std::vector und std::tr1::shared_ptr stürzt ab

pointhi

Erfahrenes Mitglied
Hy,

ich hab heute mit der Grundstruktur für ein neues programm begonnen. Es geht dabei um eine Sensorverwaltung auf Basis von XML-Dateien. Die Daten werden mittels einer Baumstruktur verarbeitet, wie auch in XML. Es gibt also ein Bussystem, an dem einzelne Knoten hängen, an denen wiederum einzelne Sensoren liegen.

Ich hab mir jetzt gedacht dass ich mit std::vector die einzelnen kindelemente speichere, die als shared_ptr als ihre Elternklasse gespeichert werden. Leider habe ich mit Vererbung noch so gut wie keine Ahnung, und ob das der optimale Weg ist. Immerhin soll das ganze projekt relativ komplex werden, und nachträgliche Änderungen werden dann nicht mehr so einfach möglich sein.

Ich habe die Speichervariable derzeit so deklariert:

C++:
std::vector< std::tr1::shared_ptr< Basisklasse > > ChieldElement;

Sobald die variable aktiv ist, stürzt aber mein Programm ab, sobald eine klasse davon instanziert wird. Ich hab jetzt keine ahnung was genau der grund dafür ist, und ob dieser Weg eigentlich der richtige für mein problem ist. Das Ziel wäre jedenfalls auch, dass ich später die instanzierte Klassenstruktur ausgeben kann.

mfg, pointhi
 
Zuletzt bearbeitet von einem Moderator:
Hi,

ich habe mal etwas ähnliches gemacht. Die Idee finde ich prinzipiell ganz ok. Ich habe damals ein Struct erstellt (ist ja eig auch eine Klasse), welches wieder Elemente hatte usw. Wie halt auch eine Xml-Datei und dementsprechend auch Vektoren falls mehrere Kindelemente vorhanden.

Zu deinem Problem, ich weiß leider nicht genau warum es abstürzt, allerdings weiß ich auch nicht, was std::tr1::shared_ptr macht.
Reicht es denn vielleicht, wenn du einen Vektor mit std::vector<Basisklasse*> erstellst und dann beim push_back() auf die vererbte Klasse mittels dynamic_cast<AbgeleiteteKlasse*> castest?
Du wirst ja denke ich eine Beschreibung deiner Sensoren als Attribut oder ähnliches speichern, mitdem du auf die richtige abgeleitete Klasse kommst.


Viele Grüße,
Jennesta
 
Ich habe die Speichervariable derzeit so deklariert:

C++:
std::vector< std::tr1::shared_ptr< Basisklasse > > ChieldElement;

Sobald die variable aktiv ist, stürzt aber mein Programm ab, sobald eine klasse davon instanziert wird.

Du solltest noch zeigen was du da genau machst.

Gruß
MCoder
 
Zuletzt bearbeitet von einem Moderator:
Ich hab das system gerade komplett umgebaut. Das Problem dieser Idee war dass im Baum beliebige Teile getauscht werden können, obwohl das für meine Anwendung nicht zulässig ist. Ich hab es jetzt mit einem System ausgetauscht das mit Vererbung einen Fixen Teil zum navigieren und diversen basisfunktionen besitzt, und Elemente die nur bestimmte andere aufnehmen können. Derzeit hat sich dabei noch kein Problem gezeigt, ansonsten werde ich es hier noch kundmachen.
Ich hab auch schon mit ein paar lehrer deswegen geredet. Die impementation der Struktur ist bei meiner sache sehr wichtig, da damit alles steht und fällt.

mfg, pointhi
 
Zurück