Eine Konstante einer Liste hat keinen Wert



  • Hallo,
    Ich bin neu hier und Programmiere auch nicht wirklich lange.
    also zu den Umständen: Ich versuche momentan ein kleines Minispiel zu schreiben. und ja ich habe bis jetzt bereits das Framework fertig und auch den Spieler erstellt und wollte jetzt einen Manager für die Gegner erstellen die von oben herab herunter fahren. Die habe ich über eine Liste erstellt. Das Problem ist jetzt das sobald ich Debuggen will er mir sagt das die Konstante "this" die ich nicht erstellt habe keinen Wert hat. Ich habe keinen blassen schimmer wie ich das beheben kann 😕 . Achso ich benutze Visual Studio 2015 Community und die Bibiliothek SFML.

    Ich bin neu hier im Forum also bitte seit nicht zu hart zu mir. 😃



  • Wie wärs mit der exakten Fehlermeldung (nicht in indirekter Rede!) inklusive etwas Code um den Fehler herum? Oder noch besser: erstelle ein kompilierbares Minimalbeispiel, in dem die Fehlermeldung auftritt.



  • Okey hier ist erstmal der Fehlercode: Ausgelöster Ausnahmefehler: Lesezugriffsverletzung

    std::_List_alloc<std::_List_base_types<Ailien,std::allocator<Ailien> > >::_Myhead(...) hat 0xCCCCCCD0 zurückgegeben.

    Hier der Code wo der fehler auftritt:

    _Unchecked_iterator _Unchecked_end()
    		{	// return unchecked iterator for end of mutable sequence
    		return (_Unchecked_iterator(this->_Myhead(), &this->_Get_data()));
    		}
    

    Edit: Der wird bei "&this->_Get_data()));" Angezeigt.

    Hier meine Manager CPP:

    #include "AIilienManager.h"
    
    Ailienmanager::Ailienmanager() {
    
    }
    
    void Ailienmanager::insert(Ailien *ailien) {
    	mList.push_back(*ailien);
    }
    
    void Ailienmanager::update(float frametime) {
    	for (auto it : mList)
    	{
    		it.update(frametime);
    	}
    }
    void Ailienmanager::handle() {
    	for (auto it : mList)
    	{
    		it.handle();
    	}
    }
    void Ailienmanager::render(sf::RenderWindow *rw) {
    	for (auto it : mList)
    	{
    		it.render(rw);
    	}
    }
    

    Hier die HPP:

    #pragma once
    #ifndef AILIENMANAGER_H
    #define AILIENMANAGER_H
    
    #include <iostream>
    #include <list>
    #include <SFML\Graphics.hpp>
    
    #include"Ailien.h"
    
    class Ailienmanager {
    public:
    	Ailienmanager();
    	~Ailienmanager();
    
    	void insert(Ailien *ailien);
    
    	void update(float frametime);
    	void handle();
    	void render(sf::RenderWindow *rw);
    
    private:
    	std::list<Ailien> mList;
    };
    #endif
    

    Ich hoffe dadurch kann man mir besser helfen 😕



  • Welche deiner Funktionen wird mit welchen Werten aufgerufen, wenn der Fehler auftritt?

    Wenn du nicht weißt was this ist, ist ein Programm mit SFML zu schreiben sportlich.



  • Du benutzt die for-Schleifen falsch. Das müsste jedes mal auto& statt ohne Referenz lauten, sonst erzeugst du jedes Mal nur eine Kopie des Objekts - was in diesem Fall wohl nicht möglich ist, da der Typ wohl nicht kopierbar ist.

    Siehe hier für die Anforderungen des Typs T von list<T> .

    Ich würde an deiner Stelle wohl eher einfach auf einen vector<shared_ptr<T>> greifen.



  • Also die Funktion wenn ich zugreife ist glaube die Alien update Funktion die bewirkt das die Textur und das Objekt geladen wird.

    wenn ich einen "&" Operator benutze zeigt er mir einen Fehler an aber wenn ich mit der Maus drüber fahre zeigt er mir nicht an was es für ein Fehler sein soll. Von dem Rest verstehe ich nix da ich noch neu im Programmieren bin 😕



  • Tjs, keine Ahnung was da jetzt nicht funktioniert und ohne den kompletten Code kann man auch nur raten. Irgendwo wirst du wohl etwas zerschossen haben.

    Was merkwürdig aussieht ist die insert-Funktion, die ein Ailien* als Parameter hat, aber in der Liste eine Kopie als Ailien speichert (wenn du die Außerirdischen meinst heißt es übrigens Alien). Meinst du vielleicht eigentlich

    std::list<Ailien*> mList;
    

    ? Wenn Nein ist der Einwand von coder123 berechtigt, alle Funktionen arbeiten nur auf Kopien der Kopien.

    Hast du die Dreierregel in Ailien verletzt?

    Wozu definierst du in Ailienmanager einen Konstruktor und Destruktor? Die Automatischen würden doch reichen.

    Ansonsten solltest du erst mal C++ lernen, bevor du zu großen Taten schreitest.


Anmelden zum Antworten