C++ 11スレッドを使い始めたばかりで、(おそらく愚かな)エラーに苦しんでいます。 これは、プログラム私の例である:C++ 11メンバ関数をコンパイルしてスレッドを初期化する
#include <iostream>
#include <thread>
#include <future>
using namespace std;
class A {
public:
A() {
cout << "A constructor\n";
}
void foo() {
cout << "I'm foo() and I greet you.\n";
}
static void foo2() {
cout << "I'm foo2() and I am static!\n";
}
void operator()() {
cout << "I'm the operator(). Hi there!\n";
}
};
void hello1() {
cout << "Hello from outside class A\n";
}
int main() {
A obj;
thread t1(hello1); // it works
thread t2(A::foo2); // it works
thread t3(obj.foo); // error
thread t4(obj); // it works
t1.join();
t2.join();
t3.join();
t4.join();
return 0;
}
は、純粋なメンバ関数からスレッドを開始することが可能ですか?そうでない場合は、foo関数をオブジェクトobjの関数でこのスレッドを作成するにはどうすればできますか? ありがとうございます!
これはコンパイルエラーです:
thread_test.cpp: In function ‘int main()’: thread_test.cpp:32:22: error: no matching function for call to ‘std::thread::thread()’
thread_test.cpp:32:22: note: candidates are:
/usr/include/c++/4.6/thread:133:7: note: std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (A::*)(), _Args = {}]
/usr/include/c++/4.6/thread:133:7: note: no known conversion for argument 1 from ‘’ to ‘void (A::*&&)()’
/usr/include/c++/4.6/thread:128:5: note: std::thread::thread(std::thread&&)
/usr/include/c++/4.6/thread:128:5: note: no known conversion for argument 1 from ‘’ to ‘std::thread&&’
/usr/include/c++/4.6/thread:124:5: note: std::thread::thread()
/usr/include/c++/4.6/thread:124:5: note: candidate expects 0 arguments, 1 provided
単純なラムダ: '[&](){obj.foo();}'を試してください。 [フルコードはこちら](http://liveworkspace.org/code/4Fh1lL$1)。 – BoBTFish
+1:小さくても完全なコード例と完全なエラーメッセージ。ここに書かれているコードスニペットはタブが好きではないことに注意してください(私はこの記事であなたのためにこれを修正しました)。 – Angew
ありがとうAngew、私は確かに将来の記事のタブを変更します。 – Rob013