deklarations zwickmühle



  • Hi.

    Ich schreibe gerade an einem Projekt. Dieses Projekt beinhaltet eine Klasse die auf Memberfunktionspointer zurückgreift. Ich habe für diese Memberfunktions pointer einen Typen deklariert:

    //header.h
    typedef void (__cdecl demo::*PFUNC ) (__in DWORD _Param);
    

    Nun benutze ich diesen Typen in Verbindung mit einer Struktur die vor der Deklaration der Klasse deklariert werden muss da sie in der Klasse mit einbezogen wird:

    //header.h
    typedef struct TASK{
    
      BYTE Flag;
      PFUNC Function;
      DWORD Parameter;
    }TSK;
    typedef TSK * PTAST;
    

    Aber der Typ selbst zeigt auf die noch undeklarierte Klasse. Wie ihr seht kann ich keins von beidem zuerst deklarieren da sich beide elemente gegenseitig referenzieren. Lösung?

    Hier nochmal eine Klasse damit ihr wisst was ich meine:

    //class.h
    typedef class demo{
    
    public:
       void __cdecl callany( __in PTASK _Dst );
       void __cdecl function( __in DWORD _Param );
    }demo;
    

    ( Ich würde void Pointer für diese Strukturen benutzen aber das wäre dann wieder
    extra Aufwand. gibt es nicht sowas wie einen allgemeinen Memberfunktionspointer der für alle beliebigen Klassen funktioniert? )



  • Was ist das denn? Standardkonformes C++ ist es auf jeden Fall nicht...



  • Lösung: Forwärtsdeklaration. Dann kannst du Zeiger auf diese Struktur deklarieren.

    Der erste Typedef in header.h ist übrigens vollkommen unsinnig.



  • Das meinte ich doch mit "void Pointer".
    Würde ich dann vorzugsweise so machen?

    typedef class demo{
    
    public:
     void __cdecl executetask( __in LPVOID Task );
     void __cdecl funktion( DWORD Zeug );
    }demo;
    

    Dachte mir nur es gebe einen Weg ohne mir jetzt soviel aufwand zumachen. Das Projekt ist etwas größer und ich müsste mehr als nur das umschreiben. Aber wenns nicht anders geht, muss ich mich wohl ranhalten.

    Danke schonmal. 🙂



  • typedef class demo{
    
    public:
     typedef ...  //task und pointer
    
    public:
     void _cdecl ... // funktionen
    
    }demo;
    
    typedef ... //task und pointer typen deklarationen nochmal hier
    

    Hab doch eine einfachere Lösung gefunden. Habe einfach die Typen in der Klasse und nocheinmal ausserhalb definiert. Danke trozdem.



  • OP schrieb:

    typedef class demo{
    }demo;
    

    Der typedef ist dämlich.



  • Darf ich mal fragen, wass dieses Thema im C++-Bereich verloren hat? Der gezeigte Code ist doch augenscheinlich kein C++ und der Autor hat nicht einmal die geringste Ahnung von dieser Sprache

    typedef class
    

    *schauder*
    Entweder der Autor lernt C++ und stellt dann eine ordentliche Frage, oder dieses Thema geht direkt ins Ansi-C-Forum.


Anmelden zum Antworten