1

このエラーが発生しています: エラー c2064: 用語は、0 引数を取る関数に評価されません。問題は、関数が 0 個の引数を取り、0 個の引数を呼び出していることです。何が問題なのかわかりません。

    RWLock* rwl = new RWLock();
    std::thread t1(&RWLock::read);

それが関数の呼び出しです。そして、これは関数です:

    void read();

誰かが問題が何であるか知っていますか? 前もって感謝します!

4

2 に答える 2

8

すべての非静的メンバー関数には、thisメンバー関数のポインターになる隠し引数があります。非静的メンバー関数をスレッドとして使用する場合は、スレッドの開始時にこの隠し引数を指定する必要があります。

std::thread t1(&RWLock::read, rwl);
于 2015-04-09T10:01:47.843 に答える
2

私はかなり確信しています、それread()は静的関数ではありません。つまり、次のように宣言しました。

void read()

それ以外の:

static void read()

非静的メンバー関数は、常に 1 つの追加引数 (暗黙のthisポインター) を取ります。静的read()にすると動作するはずです。

read()静的にできない場合は、追加の引数をstd::thread- オブジェクトへのポインタに渡します。これread()は動作します。この場合、次のようになりますrwl

RWLock* rwl = new RWLock();
std::thread t1(&RWLock::read, rwl);
于 2015-04-09T10:02:51.713 に答える