2015-08-27 11 views
-1

我在网上和本网站上阅读了一些讨论,而且我没有设法理解我的错误。我所呼吁的BlockingQueue特定队列模板:带模板和多线程的C++错误3867

template <typename T, int size> 
class BlockingQueue 
{ 

public: 
//constructor and other methods 
void inserisci(T val) { 
//do work 
}; 

private: 
queue <T> fifo; 
atomic<boolean> isClosed; 
mutex m; 
}; 

在主,我写了下面几行:

BlockingQueue<int, 5> bq; 
int k=8; 
thread t(bq.inserisci, k); 
t.join(); 
return 0; 

在编译时,我得到这个错误:

Error C3867: 'BlockingQueue::inserisci': function call missing argument list; use '&BlockingQueue::inserisci' to create a pointer to member

我阅读了Visual Studio的建议,所以我试图制作一个函数指针,但是它的工作方式不一样。

回答

1

正确的代码看起来像以下:

typedef BlockingQueue<int, 5> BQ5; 
BQ5 bq; 
int k=8; 
thread t(std::bind(&BD5::inserisci, &bq, k)); 
t.join(); 
return 0;