このエラーが発生しています: エラー c2064: 用語は、0 引数を取る関数に評価されません。問題は、関数が 0 個の引数を取り、0 個の引数を呼び出していることです。何が問題なのかわかりません。
RWLock* rwl = new RWLock();
std::thread t1(&RWLock::read);
それが関数の呼び出しです。そして、これは関数です:
void read();
誰かが問題が何であるか知っていますか? 前もって感謝します!
すべての非静的メンバー関数には、thisメンバー関数のポインターになる隠し引数があります。非静的メンバー関数をスレッドとして使用する場合は、スレッドの開始時にこの隠し引数を指定する必要があります。
std::thread t1(&RWLock::read, rwl);
私はかなり確信しています、それread()は静的関数ではありません。つまり、次のように宣言しました。
void read()
それ以外の:
static void read()
非静的メンバー関数は、常に 1 つの追加引数 (暗黙のthisポインター) を取ります。静的read()にすると動作するはずです。
read()静的にできない場合は、追加の引数をstd::thread- オブジェクトへのポインタに渡します。これread()は動作します。この場合、次のようになりますrwl。
RWLock* rwl = new RWLock();
std::thread t1(&RWLock::read, rwl);