2015-09-09 36 views
0

我有一些问题调用一个新线程的函数。该错误消息:用新线程C++调用函数,没有构造函数实例匹配参数列表

2智能感知:(,性病::的reference_wrapper,口岸系统)C:\无构造 “的std ::螺纹::线程” 的实例参数列表 参数类型相匹配Users \ Lew \ Downloads \ Programmers测试(1)\ Start \ ProgTest95 \ ProgTest95.cpp 339 23 ProgTest95

错误1错误C2661:'std :: thread :: thread':没有重载的函数需要3个参数c:\用户\ lew \ downloads \程序员测试(1)\ start \ progtest95 \ progtest95.cpp 339 1 ProgTest95

这里是我的代码:

 thread floodThread(FloodFills, std::ref(m_screenDib), mid); //error here 
     FloodFills(&m_screenDib, mid); //this works 

下面是函数我试着拨打:

void FloodFills(CDIB32* scr, CPoint& mid) 

我不明白为什么用一个新的线程时,函数重载不能正常工作。

+0

'FloodFills'有另一个过载,或者只有一个? – ForEveR

+0

它有一个其他超载 – user3427689

回答

1

std::ref参考文件的包装,不是指针。而当你调用函数一样

FloodFills(&m_screenDib, mid); 

首先参数作为指针通过。参考!=指针。

而是做

std::thread floodThread(FloodFills, &m_screenDib, mid); 
+0

感谢您的建议,这是我最初试图做的。同样的错误。 – user3427689

2

std::ref只创建引用包装,在你的第二个例子,你从m_screenDib建设的指针,但在线程版本 - 没有。

而且既然你说,它有另一个重载 - 编译器不能选择你想要发送到哪个版本的FloodFills。所以,帮助他。

auto flFnc = static_cast<void(*)(CDIB32*, CPoint&)>(FloodFills); 
thread floodThread(flFnc, &m_screenDib, std::ref(mid)); 
+0

你不能转换为函数类型;你可能意思是'static_cast (FloodFills)' –

+0

@PiotrSkotnicki是的,你是对的,谢谢。 – ForEveR

相关问题