Zeiger Problem



  • und welcher ist das?



  • Saibot1988 schrieb:

    und welcher ist das?

    Meinst du den Grund? Ein sf::RenderWindow repräsentiert ein Fenster, auf das gezeichnet werden kann. Dazu gehören recht viele Ressourcen wie Window-Handles, Renderkontexte, die nicht einfach kopiert werden können. Wieso solltest du ein Fenster kopieren wollen? Wenn du schlichtweg ein neues mit der gleichen Grösse anlegen willst, dann tu das.

    In deinem Fall sind aber Referenzen oder Zeiger die Lösung.



  • aber tu ich das denn nicht?

    angenommen

    funktion(sf::RenderWindow *App)
    {
    
      App->Draw(Sprite);
    }
    

    ich sage ihm doch über den Zeiger das die Zeichenoperation das Fenster App betrifft.
    nun will ich lediglich den Zeiger den ich an funktion gegeben habe an eine unterfunktion weiterreichen.



  • Nexus schrieb:

    void TestFunktion2(sf::RenderWindow App);
    

    Hier wird der Parameter kopiert, und sf::RenderWindow unterstützt keine Kopiersemantik (aus gutem Grund).

    Ist das wirklich so unklar formuliert? Oder wo liegt das Problem?



  • In dem von dir gezeigten Code nimmt die Funktion keinen Zeiger/Referenz. Da müsste ein * sein... (Zeiger)



  • zu deinem Letzten eintrag: es ist mir Klar das es so nicht geht.
    Anders gefragt gäbe es denn eine andere möglichkeit doch über eine Unterfunktion auf die App zuzugrifen? Vieleicht mit den Referenzen? Oder is das auch zum scheitern verurteilt.



  • Wie gesagt mit Zeigern oder mit Referenzen.

    Der Zeiger-Weg:

    void OtherFunc(sf::RenderWindow* App);
    
    void Func(sf::RenderWindow* App)
    {
        OtherFunc(App);
    }
    

    Der Referenz-Weg:

    void OtherFunc(sf::RenderWindow& App);
    
    void Func(sf::RenderWindow& App)
    {
        OtherFunc(App);
    }
    


  • Jetzt klappts auf einmal doch kommisch 😕

    Ich habs auf dem weg versucht wie du es als erstes beschrieben hast. und nun gehts.
    Habe ich der Klasse dann über den ersten aufruf das Fenster App sozusagen bekannt gemacht ja?

    Danke für die Geduld 🙄



  • Saibot1988 schrieb:

    Jetzt klappts auf einmal doch kommisch 😕

    Ich habs auf dem weg versucht wie du es als erstes beschrieben hast. und nun gehts.
    Habe ich der Klasse dann über den ersten aufruf das Fenster App sozusagen bekannt gemacht ja?

    Danke für die Geduld 🙄

    Irgendwie schon, aber sowas wäre natürlich besser:

    class CTest
    {
     private:
      sf::RenderWindow& mApp;
    
     public:
      CTest(sf::RenderWindow& app) : mApp(app) { }
    
      void doSomething()
      {
       mApp.Draw(...);
      }
    };
    


  • Ahhhh ein Kopierkonstruktor 💡

    Davon habe ich schonmal gelesen. Okay ich denke Vergessen werd ich den soleicht nichtmehr
    Danke Leute 👍



  • Saibot1988 schrieb:

    Ahhhh ein Kopierkonstruktor 💡

    Nein, nur ein normaler Konstruktor. 😉

    Ein Kopierkonstruktor würde als einzigen Parameter eine Const-Referenz auf ein Objekt der Klasse nehmen.


Anmelden zum Antworten