2016-09-26 25 views
-3

呼び出される必要があり、私は次のコードを構築しようとしているerror:Reference to non-static member function must be calledを受け取る:LinuxのC:非静的メンバ関数への参照が

HTTPClient::HTTPClient(int id,HttpListener& message) { 
    pthread_t thId; 
    pthread_create(&thId, NULL, processor, this); <--error is here 
} 

void* HTTPClient::processor(void* userData) { 
    HTTPClient* client = static_cast<HTTPClient*>(userData); 
    client->run(); 
} 

void HTTPClient::run() { 
    while(true) { 
     pthread_mutex_lock(&mMutex); 
     pthread_cond_wait(&mCond,&mMutex); 
     httpLoadFile(mUrl, mPath); 
     pthread_mutex_unlock(&mMutex); 
    } 
} 

私は、エラーを解決しようとするいくつかの方法を見つけましたが、失敗しました!

+1

質問をするのを忘れました。どんな問題がありますか? –

+0

あなたはどんなエラーが表示されますか? –

+0

pthreadsはCライブラリですので、C++のメンバ関数ではあまりうまく扱えませんが、単純なラムダを 'pthread_create(&thId、NULL、[this](void * arg){return this->プロセッサ(arg);}、これ); ''これを渡しても、既にラムダ – PeterT

答えて

2

これは、メソッドへのポインタをpthread_createに渡すことはできないと言います。通常の関数へのポインタを渡す必要があります。

関連する問題