zugriff auf mehrdimensionale Vektoren in mehreren Funktionen
-
Hallo,
ich habe in einer Klasse einen mehrdim. Vektor definiert:
typedef vector <Classxyz*> v1;
vector <v1*> vec;
Innerhalb einer Funktion füge ich dem Vektor einen Vektor
vector<classxyz*> v2; mittels push_back zu
also vec.push_back(&v2);
jetzt möchte in einer weiteren Funktion auf den Vektor vec zugreifen aber
(*vec[x]->size()) ist immer leer?(Die Größe von vec ist korrekt)Codebsp
Class A { typedef vector <Classxyz*> v1; vector <v1*> vec; int f1(); void f2(); int f1() { vector<Classxyz*> v2; v2.clear(); v2.push_back(...); v2.push_back(...); vec.push_back(&v2); v2.push_back(...); v2.push_back(...); return 0; } void f2() { std::cout<<"vec_size:"<<vec.size()<<" 1.elem v. vec_size"<<(*vec[0])->size()<<std::endl; } }f1 wird bei mir mehrmals aufgerufen evtl auch rekursiv
ich hab irgendwie keine idee wo es hängt
Danke für Hilfe
-
derboe schrieb:
Hallo,
ich habe in einer Klasse einen mehrdim. Vektor definiert:
typedef vector <Classxyz*> v1;
vector <v1*> vec;
Innerhalb einer Funktion füge ich dem Vektor einen Vektor
vector<classxyz*> v2; mittels push_back zu
also vec.push_back(&v2);
jetzt möchte in einer weiteren Funktion auf den Vektor vec zugreifen aber
(*vec[x]->size()) ist immer leer?(Die Größe von vec ist korrekt)Codebsp
Class A { typedef vector <Classxyz*> v1; vector <v1*> vec; int f1(); void f2(); int f1() { vector<Classxyz*> v2; v2.clear(); v2.push_back(...); v2.push_back(...); vec.push_back(&v2);Hier nimmst Du die Adresse eines lokalen Objektes (v2)...
v2.push_back(...); v2.push_back(...); return 0; }...welches ab hier nicht mehr existiert -> Alles kann ab hier passieren!
Dein Code ist ill formed.Ich würde die Matrix (!) so deklarieren:
typedef std::vector<Classxyz*> VecXyz; typedef std::vector<VecXyz> MatXyz; MatXyZ mat; // dann z.B. mat.push_back(VecXyz(3)); mat.push_back(VecXyz(3)); // oder zu Anfang als NxM initialisieren: MatXyz mat(M, VecXyz(N, 0));
-
ok,eigentlich war mir das ja klar das es so nichts werden kann, aber mir is auch nichts anderes eingefallen...
**
So geht alles ...
Vielen Dank für den Denkanstoss/Tip
**
-
Du kannst doch per push_back jederzeit neue Elemente zufügen (auch Vektoren). Wo ist da das Problem?
-
ja hab ich schon mitbekommen
hatte da wohl nach irgendwas kompliziertem gesucht - wo die Lösung doch so nahe liegt
-
Braunstein schrieb:
Du kannst doch per push_back jederzeit neue Elemente zufügen (auch Vektoren). Wo ist da das Problem?
Ja, eben. Welches Problem meinst Du?