Speichern von Deques - Fehler bezüglich Iterator / Allocator?



  • Hallo zusammen!

    Tatsächlich weiß ich nicht genau, wo mein Problem liegt. Anscheinend hat es etwas mit Iterator / Allocator zu tun? Die Fehlermeldung, die ich bekomme, ist meiner Meinung nach nicht allzu eindeutig (jedenfalls für mich, als jemand, der gerade an seinem ersten größeren Programm sitzt). Daher bin ich extrem dankbar für jede Hilfe und gerade einfach total aufgeschmissen.

    Folgendes:

    • aus einem existierenden Deque (Job_Liste, hiermit ist alles wunderbar) werden Elemente genommen und mit diesen Berechnungen durchgeführt. (Hier beispielsweise die Subtraktion)
    • die ermittelten Werte sollen wiederum stückweise mit anderen Parametern in einem neuen Objekt der Klasse "NeuerSchritt" gespeichert und dem neuen Deque "Schritt_Liste" hinzugefügt werden.

    Hier mein Code:

     #include "stdafx.h"
    #include <string>
    #include <iostream>
    #include "Berechnung.h"
    #include <deque>
    
    using namespace std;
    
    double Ende = 12;
    double Speicherplatz = 0;
    
    int i = 0;
    
    NeuerSchritt * alloc;
    
    
    double WegFeld[2];								// Feld für die Wege
    
    
    
    
    void Berechnung() {
    
    	Speicherplatz = Job_Liste.size();
    
    	alloc = Schritt_Liste.get_allocator().allocate(Speicherplatz);
    
    
    	while (i != Ende) {
    
    		int j = i++;
    
    		get_Werte(Job_Liste.operator[](i).X_Achse, Job_Liste.operator[](j).X_Achse, Job_Liste.operator[](i).Y_Achse, Job_Liste.operator[](j).Y_Achse, Job_Liste.operator[](i).Z_Achse, Job_Liste.operator[](j).Z_Achse);
    	 
    		
    
    		speicher_Schritt(WegFeld[0],WegFeld[1],WegFeld[2]);
    
    		i++;
    	} 
    
    
    
    
    	system("Pause");
    	
    }
    
    deque<NeuerSchritt> Schritt_Liste;
    NeuerSchritt Schritt;
    
    
    
    void get_Werte(double start_pos_x, double end_pos_x, double start_pos_y, double end_pos_y, double start_pos_z, double end_pos_z) {
    
    	WegFeld[0] = start_pos_x - end_pos_x;
    	WegFeld[1] = start_pos_y - end_pos_y;
    	WegFeld[2] = start_pos_z - end_pos_z;
    
    
    	cout << WegFeld[0] << ' ' << WegFeld[1] << ' ' << WegFeld[2] << endl;
    	system("pause");
    
    
    }
    
    
    void speicher_Schritt(double x_Wert, double y_Wert, double z_Wert) {
    	
    	Schritt.X_Achse = x_Wert;
    	Schritt.Y_Achse = y_Wert;
    	Schritt.Z_Achse = z_Wert;
    
    
    	Schritt_Liste.push_back(Schritt);
    
    }
    

    Die Schleife kommt genau zu meinem ersten "Haltepunkt", bei get_Werte. Die Funktion speicher_Schritt erzeugt anscheinend einen Fehler mit folgenden Meldungen:

    +		&_Myproxy	0x00963628 {Fraese_Operator.exe!std::deque<NeuerSchritt,std::allocator<NeuerSchritt> > Schritt_Liste} {...}	std::_Container_proxy * *
    
    
     +		&_Myproxy->_Myfirstiter	0x24745384 {???}	std::_Iterator_base12 * *
    
    
    +		_Lock	{_Locktype=3 }	std::_Lockit
    
    
     +		this	0x00963628 {Fraese_Operator.exe!std::deque<NeuerSchritt,std::allocator<NeuerSchritt> > Schritt_Liste} {...}	std::_Container_base12 *
    
    

    Ja... Wo liegt hier der Fehler? Was bedeuten diese Meldungen (in a nut shell) und wie kann ich sie zukünftig vermeiden? Wie kann ich erreichen, dass das neue Deque abgespeichert wird?

    Vielen Dank schon einmal für eure Zeit und Hilfe!



  • @johnmoe sagte in Speichern von Deques - Fehler bezüglich Iterator / Allocator?:

    Diese "Meldungen" sind keine Meldungen sondern sehen eher nach Debug-Watch Ausgaben aus.

    Was den Fehler angeht... damit:

    double WegFeld[2];
    

    definierst du ein Array mit zwei Elementen und damit

    speicher_Schritt(WegFeld[0],WegFeld[1],WegFeld[2]);
    

    greifst du auf das erste, zweite und dritte (!) Element dieses Arrays zu.



  • Was hat der Code mit CLI zu tun?

    Wozu alloc?

    Warum benutzt du eine globale Variable (WegFeld)?
    Warum ist sie ein Array (wie @hustbaer schon sagt, knallts deshalb)?
    Definiere eine struct mit x,y,z. Benutze sie als Return von get_Werte und Parameter von speicher_Schritt.



  • @johnmoe sagte in Speichern von Deques - Fehler bezüglich Iterator / Allocator?:

    Job_Liste.operator[](i)

    Das ist ja gruselig. Job_Liste[i] sollte doch wohl funktionieren.


Anmelden zum Antworten