c++11 Thread class how to use a class member function
c++, c++11
Solution
This isn't the right place for a reference wrapper. A simple pointer suffices, though, and achieves the desired result:
std::thread t1(&A::foo, &a, 100);
Problem
My programs looks like below ``` #include <iostream> #include <thread> class A { public: void foo(int n ) { std::cout << n << std::endl; } }; int main() { A a; std::thread t1(&A::foo, std::ref(a), 100); t1.join(); return 0; } ``` When I compile it using the following command I get errors ``` g++ -o main main.cc -lpthread -std=c++11 ``` Error: ``` In file included from /usr/local/include/c++/4.8.2/thread:39:0, from check.cc:2: /usr/local/include/c++/4.8.2/functional: In instantiation of ‘struct std::_Bind_simple<std::_Mem_fn<void (A::*)(int)>(std::reference_wrapper<A>, int)>’: /usr/local/include/c++/4.8.2/thread:137:47: required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (A::*)(int); _Args = {std::reference_wrapper<A>, int}]’ check.cc:13:42: required from here /usr/local/include/c++/4.8.2/functional:1697:61: error:no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void (A::*)(int)>(std::reference_wrapper<A>, int)>’ typedef typename result_of<_Callable(_Args...)>::type result_type; ^ /usr/local/include/c++/4.8.2/functional:1727:9: error:no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void (A::*)(int)>(std::reference_wrapper<A>, int)>’ _M_invoke(_Index_tuple<_Indices...>) ^ ```