Klassen mit static methoden gegenseitig benutzen



  • Ich hab jeweils den anderen Header in den Headern eingebunden und auch schon eine Forward-Deklaration beider Klassen gemacht, das hilft aber nicht. Er erkennt ja auch den Pointer auf eine Objekt der anderen Klasse an, bloß diesen in einer static Memberfunktion zu benutzen, das funktioniert nicht.



  • Verschieb mal die Implementierungen aus dem Header in den CPP-File. Danach müsste
    das mit der Forward-Deklaration funktionieren.



  • Kann man auch static memberfunktionen in der cpp implementieren?



  • Klar 🙂



  • // Mouse.hpp
    
    class System;
    
    class Mouse  
    {
    // ...
    };
    
    // Mouse.cpp
    
    #include "Mouse.hpp"
    #include "System.hpp"
    
    // System.hpp
    
    #include "Mouse.hpp" // <---
    
    class System
    {
    // ...
    };
    

    Alternativ einfach

    // System.hpp
    class System
    {
      // Refresh und Display nur deklarieren...
      bool static Refresh();
      void static Display(); // <--- nicht System::Display()
    };
    
    // System.cpp
    
    bool System::Refresh()
    {
      CurrentSystem->CurrentMouse->Actualize();
    }
    
    void System::Display()
    {
      CurrentSystem->CurrentMouse->Display();
    }
    


  • Ui, danke dir, dann hab ich da irgendwas falsch im Hinterkopf gehabt...
    Ich probiers sofort aus...



  • Danke, das funktionier soweit wunderbar!!

    Leider hab ich jetzt das Problem, das sobald ich CurrentSystem irgendwo in der System.cpp benutze ich den Fehler:

    System.obj : error LNK2001: unresolved external symbol "public: static class System * System::CurrentSystem" (?CurrentSystem@System@@2PAV1@A)
    

    Dies passiert nur, wenn die folgende Zeile in der Implementierung von System:.Refresh vorhanden ist.

    bool System::Refresh()
    {
         CurrentSystem->CurrentMouse->Actualize();
    }
    

    Ich hoffe, ihr könnt mir auch hier helfen.
    Vielen Dank schon mal im Vorraus



  • // System.hpp
    
    System* System::CurrentSystem(0);
    

    Allerdings hast du damit noch kein System Objekt.



  • Das hab ich schon versucht, dann krieg ich folgende Fehlermeldungen in der eingefügten Zeile:

    : error C2059: syntax error : 'constant'
    : error C2063: 'CurrentSystem' : not a function
    : error C2372: 'CurrentSystem' : redefinition; different types of indirection
    : see declaration of 'CurrentSystem'
    

    Woran liegt das? Was mache ich falsch?



  • Danke, hab das Problem gelöst indem ich

    System* System::CurrentSystem = 0;
    

    geschrieben hab.

    Funzt jetzt alles super, danke euch!!!


Anmelden zum Antworten