Vektor als Klassenobjekt



  • Hallo,

    ich möchte eine Funktion schreiben, die Buttons lädt. Dabei soll der Vector ein push_back erzeugen und mit dem neu erzeugten Platz arbeiten und ihn initialisieren. Als push_back soll der Vector automatisch ein neues Klassenobjekt erzeugen.

    Mein Code ist in etwa so:

    Klasse Button:

    class Button {
    protected:
    
    	//Ein paar private Variablen und Speicher
    public:
    
    	Button(std::string); //Konstruktor mit name als Argument um Button zu identifizieren	
    
            //weite funktionen um button einzustellen
    
    };
    

    main:

    //Definition von class Button (s.o.)
    
    vButton.push_back(dd::Button("recipelist_bg"));
    	vButton[vButton.size() - 1].SetTexture("Data/textures/recipelist_bg.tga");
    	vButton[vButton.size() - 1].SetPosition(5, 47);
    
    	vButton.push_back(dd::Button("recipelist_selected"));
    	vButton[vButton.size() - 1].SetTexture("Data/textures/recipelist_selected.tga");
    	vButton[vButton.size() - 1].SetPosition(5, 47);
    

    Wenn ich nun die beiden Buttons zeichnen will, erscheint der erste weiß (keine textur) und der zweite wird normal gezeichnet. mir ist aufgefallen, dass immer der zuletzt initialisierte button funktioniert. die objekte überschreiben sich also irgendwie...

    Wenn ich die buttons mit einem manuell erzeugtem objekt initialisiere, also:

    dd::Button b1;
    
    	b1.SetTexture("Data/textures/recipelist_bg.tga");
    	b1.SetPosition(5, 47);	
            vButton.push_back(b1);
    
    dd::Button b2;
    
    b2."
    b2."
     vButton.push_back(b2);
    
    ...
    

    dann geht es, aber ich hätte gerne, dass er die objekte selbst erzeugt.

    Danke im Voraus


  • Mod

    Erstelle bitte ein meinimales, aber vollständiges Minimalbeispiel zu deinem Problem. Als erstes bietet es sich an, alles was nicht Standard-C++ ist, rauszuwerfen und durch einfache Textausgaben zu ersetzen. Dann kürzt du noch sämtliche nicht benutzten Funktionen und versuchst alles möglichst stark zu kürzen. Zwischendurch testest du immer wieder, ob das Problem noch existiert. Wenn es verschwindet, dann solltest du dir die zuletzt gekürzten Stellen genauer angucken.

    Dein bisher gezeigter Code kann höchstens für ein paar leichte Verdächtigungen herhalten und für Allgemeinfloskeln wie "Du machst was falsch".

    Siehe auch den dritten Link in meiner Signatur.



  • SeppJ schrieb:

    Erstelle bitte ein meinimales, aber vollständiges Minimalbeispiel zu deinem Problem. Als erstes bietet es sich an, alles was nicht Standard-C++ ist, rauszuwerfen und durch einfache Textausgaben zu ersetzen. Dann kürzt du noch sämtliche nicht benutzten Funktionen und versuchst alles möglichst stark zu kürzen. Zwischendurch testest du immer wieder, ob das Problem noch existiert. Wenn es verschwindet, dann solltest du dir die zuletzt gekürzten Stellen genauer angucken.

    Dein bisher gezeigter Code kann höchstens für ein paar leichte Verdächtigungen herhalten und für Allgemeinfloskeln wie "Du machst was falsch".

    Siehe auch den dritten Link in meiner Signatur.

    besser?


  • Mod

    kralo9 schrieb:

    besser?

    Nein, überhaupt nicht. Du hast zwar den hier gezeigten Code gekürzt, der Code ist aber immer noch unvollständig und ich habe gehörige Zweifel, ob du den nun gezeigten Code überhaupt bei dir ausprobiert hast, ob er den Fehler noch zeigt.

    Vollkommen unbrauchbar, ich habe fast den Eindruck, du hast mich absichtlich falsch verstanden. Du erwartest hier freiwillige, kompetente Hilfe, bist aber nicht bereit, mal 10-20 Minuten zu investieren, um dein Problem halbwegs nachvollziehbar zu schildern?



  • kralo9 schrieb:

    SeppJ schrieb:

    Erstelle bitte ein meinimales, aber vollständiges Minimalbeispiel zu deinem Problem...

    besser?

    Nein, lies bitte nochmal die Antwort von SeppJ. Weder ist der Code kompilierbar, noch enthält er auch nur das nötigste (Die Implementierung von Button::SetTexture und Button::SetPosition fehlen z.B. ganz...).

    Zudem solltest du dir vector::back mal anschauen.


Anmelden zum Antworten