C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

pointer auf klassen member function

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Uwe Grawert
Guest





PostPosted: Sat Mar 04, 2006 8:31 pm    Post subject: pointer auf klassen member function Reply with quote



Hallo,
eine C-function wünscht von mir, daß ich ihr einen zeiger auf eine
funktion als parameter übergebe. ich möchte ihr gerne einen zeiger auf
eine member-funktion meiner klasse geben, aber der compiler sagt:

void (MyClass::*)(void*, void*) can not be converted to
void (*)(void*, void*)

ich habe die member-funktion als protected deklariert.
Was mach ich denn da falsch?
vielen dank!!

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Thomas Maeder
Guest





PostPosted: Sun Mar 05, 2006 8:06 am    Post subject: Re: pointer auf klassen member function Reply with quote



Uwe Grawert <no (AT) spam (DOT) com> writes:

Quote:
eine C-function wünscht von mir, daß ich ihr einen zeiger auf eine
funktion als parameter übergebe. ich möchte ihr gerne einen zeiger auf
eine member-funktion meiner klasse geben, aber der compiler sagt:

void (MyClass::*)(void*, void*) can not be converted to
void (*)(void*, void*)

ich habe die member-funktion als protected deklariert.
Was mach ich denn da falsch?

Du verwechselst zwei Dinge, welche miteinander nichts zu tun haben.

Um eine (nichtstatische) Memberfunktion aufzurufen, brauchst Du ein
Objekt, auf das Du sie anwendest, und allenfalls Argumente
entsprechend der Parameterliste. Um eine Nichtmemberfunktion
aufzurufen, brauchst Du nur die Argumente.

Es ist also nicht sinnvoll, eine Memberfunktion verwenden zu wollen,
wo eine Nichtmemberfunktion erwartet wird.

Entsprechend gibt es in der Sprache keine implizite Umwandlung von
"Zeiger auf Memberfunktion" nach "Zeiger auf Nichtmemberfunktion",
selbst wenn die Parameterlisten übereinstimmen. Das erklärt die
Fehlermeldung des Compilers.


Üblicherweise haben solche C-Funktionen einen Parameter vom Typ
void *, mit dem der Benutzer ein "Ding" übergeben kann, welches beim
Rückruf wieder übergeben wird.

Beispiel:

extern "C"
{
typedef void (*callback_fct)(void*, void*);

void register_callback(callback_fct callback, void *userdata);
}

Wenn die als callback registrierte Funktion zurückgerufen wird, dann
mit dem als userdata übergegebenen Zeiger als einem der Parameter.


Damit kannst Du Dir eine Brücke zur Klasse MyClass bauen:

extern "C" void MyClass_callback(void *v, void *userdata)
{
MyClass *object(static_cast<MyClass *>(userdata));
object->callback(v);
}

void register_MyClass_callback(MyClass *object)
{
register_callback(&MyClass_callback,object);
}


Löst das Dein Problem?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.