Suchergebnisse
Suchergebnisse 1-12 von insgesamt 12.
Zitat Ich gehe sogar noch ein Schritt weiter und sage lass den selbst geschriebenen Kopierkonstruktor weg und lass den Compiler diese arbeit machen. Ich habe noch eine weitere Klasse, die von Button erbt(ButtonRectangle) siehe Git. Diese hat ihren eigenen Kopierkonstruktor, der wiederum den von Button aufruft. Würde C-/C++-Quelltext 1 2 3 4 5 ButtonRectangle::ButtonRectangle(const ButtonRectangle &otherBR) { setButton(*otherBR.getButton()); setShape(*otherBR.getShape()); } reichen? Oder doch li...
Also würde C-/C++-Quelltext 1 m_text.setFont(otherButton.getFont()); reichen?
Geht! Aber nun zum Kopierkonstruktor: Ich habe Button.h um folgendes erweitert: C-/C++-Quelltext 1 2 int FM_font_used_index; FontManager *FM_Pointer; FM_Pointer, FM_font_used_index werden im Konstruktor definiert C-/C++-Quelltext 1 :FM_font_used_index(p_FM_index), FM_Pointer(&p_FM) Mein Kopierkonstruktor sieht nun so aus: C-/C++-Quelltext 1 2 3 4 5 6 7 8 9 Button::Button(const Button &otherButton) :active(otherButton.getActive()) { m_text.setFont(*otherButton.FM_Pointer->FM_getFont(otherButton.F...
Ab jetzt gibt dieser nur noch pointer auf das Font zurück. Allerdings bleiben oben genannte Probleme bestehen
Meine FontManager Klasse sieht jetzt folgendermaßen aus: C-/C++-Quelltext 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #pragma once #include "Game.h" class FontManager { public: FontManager(); ~FontManager(); void setFont(std::string p_direction, int p_index); void addFont(std::string p_dircetion); sf::Font FM_getFont(int p_index) const; private: std::vector<sf::Font> m_font; // 1: Cabin, 2: Berlin Sans, 3: arial }; Ein Objekt dieser Klasse ist jetzt außerdem an zentraler Stelle im Projekt erste...
Ich habe mir nun eine FontManager Klasse erstellt, inder alle Fonts geladen werden: C-/C++-Quelltext 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class FontManager { public: FontManager(); ~FontManager(); void setFont(std::string p_direction, int p_index); sf::Font FM_getFont(int p_index) const; private: sf::Font m_font[3]; // 1: Cabin, 2: Berlin Sans, 3: arial }; Meine Button Klasse erbt von dieser und den KopierKonstruktor habe ich angepasst: C-/C++-Quelltext 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Button:...
Die getFont Funktion gibt eigentlich nur den Font des Textes zurück (*m_text.getFont()). m_text = otherButton.text würde doch alle Attribute von sf::Text kopieren, ich brauche aber nur diese wenigen. Das sollte doch das Problem lösen, oder? Wenn nicht, wie könnte ich sonst noch vorgehen?
Ganz vergessen, jetzt funktionierts Danke
Erstmal vielen Dank für die schnellen Antworten! Ich habe nun einen Kopierkonstruktor erstellt : C-/C++-Quelltext 1 2 3 4 5 6 7 8 Button::Button(Button &otherButton) { m_text.setFont(otherButton.getFont()); m_text.setCharacterSize(otherButton.getSize()); m_text.setPosition(otherButton.getPos()); m_text.setString(otherButton.getString()); m_text.setColor(otherButton.getColor()); } "const" konnte ich hier nicht verwenden, da ich auf die Funktionen der "otherButton" Klasse Zugriff benötige. Stimmt ...
Ich habe jetzt unique_ptr beim erstellen im Vector genommen. Sind die Klassen nun ok? Hier nochmal das Projekt auf Git: TowerDefense
Zitat von »BlueCobold« Du kopierst den Button, damit den Text und den Font. Dabei werden alle Deine Referenzen ungültig. Wird in dem Vector nicht ein neues Object der Klasse Button gespeichert? An welcher Stelle wird der Kopierkonstruktor aufgerufen? Bitte berichtige mich, wenn ich falsch liege.
Ich bin gerade dabei ein Spiel zu erstellen. Ich habe die Klasse Button erstellt und 3 Objekte davon in eine Vector in MainMenuState.cpp(im Konstruktor) gespeichert. Wenn man folgende Zeilen auskommentiert kommt der Zugriffsverletzungsfehler: C-/C++-Quelltext 1 2 3 m_buttons[0].setFont("assets//font//arial.ttf"); m_buttons[1].setFont("assets//font//arial.ttf"); m_buttons[2].setFont("assets//font//arial.ttf"); Dies ist aber eigentlich das selbe, das der Konstruktor in "Button.cpp" macht, deshalb ...