线程C ++:没有用于调用的匹配函数

时间:2016-03-29 15:17:43

标签: c++ multithreading class

我是c ++的新手,我想利用线程从主类调用BM类方法。我有main.cpp,BM.h和BM.cpp文件

我在main.cpp

中的部分代码
string id = res->getString("nct_id");
char txt[temp_size];
char pat[5];
BM bm ;
thread Sam(&BM::search,&bm, txt, pat ,id); // use thread calls class method

BM.h

void search( char *txt,  char *pat , string id);

BM.cpp

void BM::search( char *txt,  char *pat ,string id)

我有错误:

No matching function for call to
'std::thread::thread(void (BM::*)(char*, char*, std::string), BM*, char [(((sizetype)(((ssizetype)temp_size) + -1)) + 1)], char [5], std::string&)'

请帮帮我

谢谢

1 个答案:

答案 0 :(得分:2)

这是因为您使用的是非标准语言扩展,即可变长度数组(VLA)。这些数组不适用于模板。建议抛弃所有字符数组和所有VLA,并始终使用std:string和std :: vector。

如果你不能,请使用这个简单的解决方法:

thread Sam(&BM::search,&bm, &txt[0], pat ,id);