模板和多线程的 C++ 错误 3867
C++ Error 3867 with templates and multi-threading
我在网络上和本网站上阅读了一些讨论,而且我没能理解我的错误。我有一个名为 BlockingQueue 的特定队列,带有模板:
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的建议,所以我试着做一个函数指针,但是效果不一样。
正确的代码如下所示:
typedef BlockingQueue<int, 5> BQ5;
BQ5 bq;
int k=8;
thread t(std::bind(&BD5::inserisci, &bq, k));
t.join();
return 0;
我在网络上和本网站上阅读了一些讨论,而且我没能理解我的错误。我有一个名为 BlockingQueue 的特定队列,带有模板:
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的建议,所以我试着做一个函数指针,但是效果不一样。
正确的代码如下所示:
typedef BlockingQueue<int, 5> BQ5;
BQ5 bq;
int k=8;
thread t(std::bind(&BD5::inserisci, &bq, k));
t.join();
return 0;