Typenproblem bei Funktionszeiger
-
Huhu!
Ich möchte einen Thread innerhalb einer Klasse erstellen und will das folgendermaßen realisieren:int ircclient::irc_connect(char *HostnameOrIP, int Port) { ... //Message Dispatcher starten int iret1; iret1 = pthread_create( &dispatcher_thread, NULL, message_dispatcher, (void*)&s); return 0; } void ircclient::*message_dispatcher( void *socket ) { ... }Wenn ich das kompilieren will, bekomme ich in Zeile 7 folgenden fehler:
Fehler: Argument des Typs >>void* (ircclient::)(void*)<< passt nicht zu >>void*(*)(void*)<<Wenn ich die Threadfunktion außerhalb der Klasse definiere, lässt sich der Code Problemlos kompilieren:
int ircclient::irc_connect(char *HostnameOrIP, int Port) { ... //Message Dispatcher starten int iret1; iret1 = pthread_create( &dispatcher_thread, NULL, message_dispatcher, (void*)&s); return 0; } void *message_dispatcher( void *socket ) { ... }Die Funktion muss aber unbedingt in der Klasse sein! Was mache ich falsch, bzw ist das überhaupt möglich?
-
-
am einfachsten:
#if !defined (IRC_CLIENT_HPP__INCLUDED) #define IRC_CLIENT_HPP__INCLUDED #if (_MSC_VER >= 1300) #pragma once #endif // (_MSC_VER >= 1300) #include <string> namespace irc { class client { // ... public: int connect(std::string const&, const unsigned short); private: inline static void _message_dispatcher(void* ptr_this) { static_cast<client*>(ptr_this)->message_dispatcher(); } public: virtual void message_dispatcher(); // ... }; }; // irc #endif // IRC_CLIENT_HPP__INCLUDED#include "irc\client.hpp" #include <iostream> // std::clog ;) namespace irc { int client::connect(std::string const& host, const unsigned short port) { // ... const int result(::pthread_create(&dispatcher_thread, NULL, &client::_message_dispatcher, this); // ... return 0; } void client::message_dispatcher() { std::clog << "Dispatching messages!" << std::endl; } }; // ircWenn du noch Parameter an message_dispatcher übergeben willst, musst du eine struct nutzen!