Objektpointer und der Gültigkeitsbereich...



  • redrew99 schrieb:

    Warum den Vektor nicht gleich ausserhalb der Funktion erzeugen und per Referenz/Zeiger übergeben?

    Weil's anders hübscher ist.



  • Super! Jetzt funktioniert es.

    Hier nochmal mein jetziger Code:

    class Button {
    protected:
    
    //Hier ein paar Variablen etc.
    
    public:
    
    	void SetName(std::string);
    	std::string GetName();
    
    	bool SetTexture(std::string);
    	bool SetHoverTexture(std::string);
            bool OnHover(std::string);
    	void SetPosition(float, float);
    
            //Und noch ein paar mehr Funktionen...
    
    };
    
    std::vector<Button> Loader::LoadButtons() {
    
    	std::vector<Button> v;
    
    	//Spiel starten Button
    
    	v.push_back(Button());
    	v[v.size() - 1].SetTexture("Data/mm_startgame.tga");
    	v[v.size() - 1].SetHoverTexture("Data/mm_startgame_hover.tga");
    	v[v.size() - 1].OnHover("Data/meteor_damaged.ogg");
    	v[v.size() - 1].SetPosition(400, 300);
    	v[v.size() - 1].SetName("startbutton");
    
    	return v;
    }
    
    unsigned int getArrayNum(std::string searchstring, std::vector<Button> v) {
    
    	for (unsigned int i = 0; i != v.size(); i++) {
    		if (v[i].GetName() == searchstring)
    			return i;
    	}
    
    	//Fehler, gebe 0 zurück
    
    	return 0;
    
    }
    
    Loader loader;
    
    int main(){
    
    std::vector<Button> vButton = loader.LoadButtons();
    
    //Ab jetzt kann ich fast wie gewohnt mit den Buttons arbeiten:
    
    vButton[getArrayNum("startbutton", vButton)].Draw(App);
    ...
    }
    

    Noch eine Frage zu:

    unsigned int getArrayNum(std::string searchstring, std::vector<Button> v) {
    
    	for (unsigned int i = 0; i != v.size(); i++) {
    		if (v[i].GetName() == searchstring)
    			return i;
    	}
    
    	//Fehler, gebe 0 zurück
    
    	return 0;
    
    }
    

    Kann ich den Parameter std::vector<Button> nicht verallgemeinern? Wenn ich vielleicht mehrere Klassenvektoren auf diese Weise untersuchen möchte?
    Wäre das gültig:

    template<class T> unsigned int getArrayNum(std::string searchstring, std::vector<T> v) {
    
    	for (unsigned int i = 0; i != v.size(); i++) {
    		if (v[i].GetName() == searchstring)
    			return i;
    	}
    
    	//Fehler, gebe 0 zurück
    
    	return 0;
    
    }
    

    Also kompilieren tut er ohne Fehler und funktionieren tut das Programm auch.


Anmelden zum Antworten