C++使用新线程调用函数,没有构造函数实例与参数列表匹配
C++ calling function with new thread, no instance of constructor matches argument list
使用新线程调用函数时遇到一些问题。错误消息为:
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);
相关文章:
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- C++初始化类实例时隐式调用类成员的构造函数
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++ 常量正确性/缺少支持常量和非常量实例的类的常量构造函数
- C++ - 使用另一个类的构造函数实例化一个对象
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++如何在类构造函数中实例化 std::array?
- 避免通过操作从私有构造函数间接实例化
- 类构造函数 - 没有构造函数的实例
- 没有构造函数模型的实例::模型匹配参数列表
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- C++:如何在结构中定义类实例.类具有参数化的构造函数
- 在保证复制的世界中构造函数实例化
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- C++构造函数的实例都与参数列表匹配
- 为什么GCC将对全局实例构造函数的调用放在不同的部分(取决于目标)
- 如果使单一实例构造函数受到保护,缺点是什么 - 继承 - C++11.