2

スレッドによって呼び出される関数があります。この関数には、 queue::my_queue という一意の引数があります。したがって、スレッドによって呼び出されるメソッドで、次のように void ポインターでキャストを実行する必要があります。

void *AddPacket(void *Ptr) 
{     queue<int> my_queue = (queue*)Ptr ; 
       my_queue.push(byte) ; 
}

そして主に、私は:

int main()
{   // do business
  pthread_create(&thread, NULL, &AddPacket, (void*)queue) ; 
}

しかし、どちらの変換も間違っています。

最初の変換でエラーが発生します:

'my_queue' のメンバー 'push' のリクエスト。これは非クラス タイプ 'queue*' です。</p>

そして2番目のもの:

タイプ「queue」からタイプ「void*」への無効なキャスト</p>

どうすれば問題を解決できますか?

4

3 に答える 3

4

オブジェクト型をポインタ型にキャストしようとしています。それは許可されていません。あなたはC++を初めて使用するので、ここに修正されたコードを投稿して、混乱を解き、作業を進めますが、C++に関する本を読んでください。

queue<int>* my_queue = (queue<int>*)Ptr ; 
my_queue->push(byte) ;

pthread_create(&thread, NULL, &AddPacket, &queue) ; 

C++のポインタについて読むことを忘れないでください:)

于 2012-08-06T20:48:01.797 に答える
3

試す:

queue<int> *my_queue = (queue<int> *)Ptr ;
my_queue->push(byte) ;

pthread_create(&thread, NULL, &AddPacket, (void*)&queue) ; 

..とにかく、それらの線に沿った何か

于 2012-08-06T20:46:43.307 に答える
1

スレッド関数とスレッド作成の両方を変更する必要があります。

// thread entry point:
void *AddPacket(void *Ptr)
{
    reinterpret_cast<std::queue<int>*>(Ptr)->push(byte);
}

// thread creation:

std::queue<int> q;
pthread_create(&thread, NULL, &AddPacket, &q);
//                                        ^^^^ **pointer** to "q";
//                                        conversion to void* is implied
于 2012-08-06T20:52:01.817 に答える