#include <vector>
#include <thread>
int main()
{
vector<int> a;
thread s(&vector<int>::push_back,&a,3);
}
我收到这些代码的编译错误:
main.cpp:52:39: error: no matching function for call to
‘std::thread::thread(<unresolved overloaded function type>, std::vector<int>*, int)’
thread s(&vector<int>::push_back,&a,3);
我可以得到任何帮助吗?
答案 0 :(得分:2)
错误告诉您它不知道要使用哪个vector<int>::push_back
重载,
void vector<int>::push_back(const int& val);
或
void vector<int>::push_back(int&& val);
因为它们都有相同的名称。
解决方法是static_cast
到所需的函数类型,或者声明一个正确类型的变量,
e.g。
thread s(static_cast<void(vector<int>::*)(const int&)>(&vector<int>::push_back),&a,3);
或
void (vector<int>::* func)(const int&) = &vector<int>::push_back;
thread s(func, &a, 3);
我知道,这太可怕了。
答案 1 :(得分:1)
您可以尝试传递lambda:
thread s([](vector<int>& a, int b) {
a.push_back(b);
}, std::ref(a), 3);