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?


Anmelden zum Antworten