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.