0

私は現在 C++ を学習しようとしていますが、理解できないコンパイラ エラーが 1 つあります。誰かがコンパイラエラーの意味を説明してもらえますか?

 1 #include <thread>
 2 #include <vector>
 3 #include <iostream>
 4 
 5 namespace thread_pool {
 6   
 7   class worker {
 8     public: 
 9       worker();
10     private:
11   };
12   
13   worker::worker() { std::cout << "hello from worker\n"; }
14   
15   class pool_keeper {
16     public:
17       pool_keeper(int);
18     private:
19       std::vector< std::thread > workers_;
20       int pool_size_;
21   };
22 
23   pool_keeper::pool_keeper(int pool_size) {
24     int i; 
25     pool_size_ = pool_size; 
26     for (i=0; i<pool_size_; i++) 
27       workers_.push_back(std::thread(worker()));
28   }
29 }

コンパイラは私にこれを与えます:

In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/thread:39:0,
            from 01.cpp:1:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/functional: In member function ‘void std::_Bind_result<_Result, _Functor(_Bound_args ...)>::__call(std::tuple<_Args ...>&&, std::_Index_tuple<_Indexes ...>, typename std::_Bind_result<_Result, _Functor(_Bound_args ...)>::__enable_if_void<_Res>::type) [with _Res = void, _Args = {}, int ..._Indexes = {}, _Result = void, _Functor = thread_pool::worker, _Bound_args = {}, typename std::_Bind_result<_Result, _Functor(_Bound_args ...)>::__enable_if_void<_Res>::type = int]’:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/functional:1378:24:   instantiated from ‘std::_Bind_result<_Result, _Functor(_Bound_args ...)>::result_type std::_Bind_result<_Result, _Functor(_Bound_args ...)>::operator()(_Args&& ...) [with _Args = {}, _Result = void, _Functor = thread_pool::worker, _Bound_args = {}, std::_Bind_result<_Result, _Functor(_Bound_args ...)>::result_type = void]’
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/thread:117:13:   instantiated from ‘void std::thread::_Impl<_Callable>::_M_run() [with _Callable = std::_Bind_result<void, thread_pool::worker()>]’
            01.cpp:29:1:   instantiated from here
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/functional:1287:4: error: no match for call to ‘(thread_pool::worker) ()’

std::thread のコードを調べて、コンパイラ エラーの意味を理解しようとしていましたが、解決策を見つけるためのより良い方法があると思います。

4

1 に答える 1