Hallo zusammen,
ich habe hier ein etwas umfangreicheres Projekt in C++ und hadere gerade etwas mit Zeigern und Referenzen im Zusammenhang mit Vectoren. Ja, bin ein Java-"Kind" :/
Meine Situation: Ich habe eine Klasse A, die zwei Vectoren enthält. Einer ist vom Typ A, der andere vom Typ B (enthält eigentlich nur den Namen des Objekts). In einer Klasse C wird daraus ein Baum aufgebaut (A sind die inneren Knoten, B die Blätter). Soweit funktioniert das ganz gut, allerdings werden in meinen Vectoren die falschen Werte abgespeichert - vermutlich weil ich die Zeiger falsch verwende.
Hier die relevanten Parts des Codes:
Soweit dazu, ich hoffe das ist alles nötige. Wenn nicht, zeig ich gern noch mehr.
Wenn ich nun mit dem nächsten Snippet versuche, mir Attribute der Vectorelemente ausgeben zu lassen, bekomme ich für type = -842150451. type bewegt sich allerdings nur zwischen 0 und 5 (zur Unterscheidung verschiedener Typen von A-Objekten)
Achja: includes usw. habe ich mal weggelassen, die sollten allerdings in Ordnung sein.
ich habe hier ein etwas umfangreicheres Projekt in C++ und hadere gerade etwas mit Zeigern und Referenzen im Zusammenhang mit Vectoren. Ja, bin ein Java-"Kind" :/
Meine Situation: Ich habe eine Klasse A, die zwei Vectoren enthält. Einer ist vom Typ A, der andere vom Typ B (enthält eigentlich nur den Namen des Objekts). In einer Klasse C wird daraus ein Baum aufgebaut (A sind die inneren Knoten, B die Blätter). Soweit funktioniert das ganz gut, allerdings werden in meinen Vectoren die falschen Werte abgespeichert - vermutlich weil ich die Zeiger falsch verwende.
Hier die relevanten Parts des Codes:
C++:
//A.h
class A
{
public:
//... div. Funktionen und Konstruktoren
void addChildB(B* b);
void addChildA(A* a);
private:
std::vector<B> childsB;
std::vector<A> childsA;
int type;
}
C++:
//A.cpp
/* Diese Funktion übernimmt das Einfügen in den Vektor */
void A::addChildB(B* b) //analog gibt es dazu nochmal dieselbe für addChildA...
{
childsB.push_back(*b);
}
C++:
//C.cpp
void C::baueBaum(B currNode) //analog gibt es dazu nochmal dieselbe für addChildA...
{
// ...
string name("a");
B newB = *new B(name);
currNode->addChildB(&newB);
// ...
}
Wenn ich nun mit dem nächsten Snippet versuche, mir Attribute der Vectorelemente ausgeben zu lassen, bekomme ich für type = -842150451. type bewegt sich allerdings nur zwischen 0 und 5 (zur Unterscheidung verschiedener Typen von A-Objekten)
C++:
/* Diese Funktion gibt den Baum aus (ist nur ein Fragment der Funktion) */
void print(A rt)
{
for(size_t i = 0; i < rt.getChildsA().size(); ++i)
{
if( i == 0 ) std::cout << off << "\nChilds of class A: ";
std::cout << off << rt.getChildsA().at(i).getTypeAsInt() << " ";
}
}
Achja: includes usw. habe ich mal weggelassen, die sollten allerdings in Ordnung sein.