Hilft mir mal einer dabei, Arrays in einer deque zu speichern?



  • Verschiedene Variablen bzw Floatarrays, Typ:

    typedef float tPose[256];
    

    sollen in einer deque gespeichert werden.

    mein Ansatz war:

    std::deque<float*> m_deqPoses;
    
    for(int i=0;i<ptListSize;i++){
    	tPose pose;
    
            // Diese externe API-Funktion liest eine tPose in -> pose
    	if(!apGetProperty(file_list[i], P_POSE, &pose)){
               return false;
    	}
    	m_deqPoses.push_back(pose);
    }
    

    Problem: es steht in jedem Platz des Vectors das gleiche Array.
    Ihr Profis reisst mir sicherlich wie immer gleich den Kopf ab 🙂 Aber sagt mir doch bitte trotzdem noch dazu, wie ich das machen muss und was ich da wieder nicht richtig verstanden habe...



  • boost::array oder std::vector



  • DrOetker schrieb:

    Problem: es steht in jedem Platz des Vectors das gleiche Array.

    Logisch. Deine lokale Variable pose kommt ja immer an derselben Stelle auf dem Stack zu liegen. Und du packst nur die Adresse in deine deque.

    std::deque<tPose>?



  • Erstmal sieht der typedef irgendwie falsch herum aus - das sollte doch "typedef float tPose[256];" heißen.

    Und zweitens hast du ein lokales Array, das du in jedem Schleifendurchlauf neu füllst und dessen Adresse du dann in die deque packst - da ist klar, daß dort überall die selbe Adresse steht (btw ist der Inhalt hinter dieser Adresse am Ende der Schleife undefiniert).

    PS: Du solltest die Arrays lieber per new anlegen (und nicht vergessen, sie wieder freizugeben).



  • das mit dem typedef stimmt natürlich, hab ich mich verschrieben.
    bei der Deklaration:

    std::deque<tPose> m_deqPoses;
    

    bekomme ich den Fehler:

    error C2075: 'Target of operator new()' : array initialization needs curly braces
    

    werde mal versuchen, die Dinger mit new anzulegen.

    EDIT: super, hat hingehauen:

    for(int i=0;i<ptListSize;i++){
    		float* pose = new float[256];
    
    		if(!apGetProperty(file_list[i], P_POSE, pose)){
    			writeDebug(3, "FEHLER: Pose auslesen");
    		}
    
    		m_deqPoses.push_back(pose);
    
    	}
    

    (aufgeräumt wird woanders)


Anmelden zum Antworten