使用新线程调用函数时遇到一些问题。错误消息为:
2 IntelliSense:没有构造函数"std::thread::thread"的实例与参数列表匹配参数类型为:(,std::reference_wrapper,CPoint(c:\Users\Lew\Downloads\Programmers Test(1(\Start\ProgTest95\ProgTest95.cpp 339 23 ProgTest95
错误1错误C2661:"std::thread::thread":没有重载函数接受3个参数c:\users\lew\downloads\programmers test(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)
我不明白为什么在使用新线程时函数重载不起作用。
std::ref
只创建引用包装器,在第二个示例中,您从m_screenDib
构造指针,但在线程版本号中。
既然您说它有另一个重载,编译器就无法选择要发送给函数的FloodFills
的哪个版本。所以,帮他吧。
auto flFnc = static_cast<void(*)(CDIB32*, CPoint&)>(FloodFills);
thread floodThread(flFnc, &m_screenDib, std::ref(mid));
std::ref
是引用的包装器,而不是指针。当你调用这样的函数时
FloodFills(&m_screenDib, mid);
第一个参数作为指针传递。参考!=指针。
取而代之的是
std::thread floodThread(FloodFills, &m_screenDib, mid);