Pointer auf Memberfunktion



  • Hallo!

    Ich habe folgendes Problem:

    Ich habe in einer Klasse zwei public Funktionen:

    void StartContainer_Xml( type_Occur wLevel
    							, string *pxType
    							, string *pxName 
    							, type_Occur wSequenceNro ) ;
    
    	void StartContainer_Plain( type_Occur wLevel
    							 , string *pxType
    							 , string *pxName 
    							 , type_Occur wSequenceNro ) ;
    

    und möchte jetzt im Constructor einen public Member-Pointer

    void (*StartContainer)( type_Occur 
    						  , string* 
    						  , string*  
    						  , type_Occur  ) ;
    

    auf eine der beiden Funktionen setzen, so dass von aussen immer nur StartContainer(...) aufgerufen wird.

    Ich hab's so versucht:

    StartContainer = StartContainer_Xml ;
    

    Ich benutze Visual C++ 6.0 und bekomme immer diese Fehlermeldung:

    c:\smldataparser_src\out_put.cpp(328) : error C2440: '=' : cannot convert from 'void (__thiscall OUT_PUT::*)(unsign ...
    to 'void (__cdecl *)(unsigned int ...

    Wie muss ich die Zuordnung machen, dass es geht?
    Schon mal jetzt: Danke!



  • MeinAlterEgo schrieb:

    ...
    Ich benutze Visual C++ 6.0 und bekomme immer diese Fehlermeldung:

    c:\smldataparser_src\out_put.cpp(328) : error C2440: '=' : cannot convert from 'void (__thiscall OUT_PUT::*)(unsign ...
    to 'void (__cdecl *)(unsigned int ...
    ...

    Recht hat er !! 😉
    Es liegt aber nicht an der Zuweisung, sondern an der Deklaration.
    Merke: "Pointer auf Memberfunktionen" sind was ganz anderes als "Pointer auf Funktionen"

    MeinAlterEgo schrieb:

    ...

    void (*StartContainer)( type_Occur 
    						  , string* 
    						  , string*  
    						  , type_Occur  ) ;
    

    ...

    Hier definierst Du eine Variable, die einen Funktionspointer aufnehmen kann.

    Wenn es eine Memberfunktion der Klasse MyClass sein soll, müsste es lauten:

    void (MyClass::*StartContainer)( type_Occur 
    						  , string* 
    						  , string*  
    						  , type_Occur  ) ;
    

    BTW:

    aussagekräftiger Threadtitel [X]
    aussagekräftiger Sourcecode-Abschnitt [X]
    Fehlermeldung angegeben [X]
    Compilerversion angegeben [X]

    👍 😋 Sehr gut !! 🙂

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Merke: "Pointer auf Memberfunktionen" sind was ganz anderes als "Pointer auf Funktionen"

    Ergänzend sei zu sagen, das du beim Aufruf über den Instanzzeiger (in diesen Fall wohl über this gegeben) gehen musst!
    Methodenzeiger haben effektiv 2 Teile: Instanzzeiger + Funktionszeiger (Ausnahme statische Methoden, die keine Instanz haben, und daher mit einfachen Funktionszeigern abbildbar sind).

    Aber dazu wirst du mit ein wenig googlen oder Forumssuche genügend finden.

    cu André



  • Danke!



  • asc schrieb:

    ...
    Ergänzend sei zu sagen, das du beim Aufruf über den Instanzzeiger (in diesen Fall wohl über this gegeben) gehen musst!
    Methodenzeiger haben effektiv 2 Teile: Instanzzeiger + Funktionszeiger ...

    👍 Gut, dass Du das noch erwähnt hast !!

    Sorry, war mir entschlüpft!

    Simon2.


Anmelden zum Antworten