使用 boost::bind 的调用错误没有匹配的函数
Posted
技术标签:
【中文标题】使用 boost::bind 的调用错误没有匹配的函数【英文标题】:No matching function for call Error using boost::bind 【发布时间】:2014-05-07 05:01:10 【问题描述】:我正在尝试编写一个并行冒泡排序函数。我在使用 boost::bind: 时遇到错误:
void swap(vector<int>& input, int i, int j)
if (input[i] > input[j])
int temp = input[j];
input[j] = input[i];
input[i] = temp;
return;
void parallel_bubblesort(vector<int>& input, int, int)
int i, j, temp;
for (i = 0; i < input.size(); i++)
boost::asio::io_service ioservice;
boost::thread_group threadpool;
for (j = 0; j < input.size() - 1; j++)
ioService.post(boost::bind(&swap, boost::ref(input), 2 * j + i % 2, 2 * j + 1 + i % 2));
for (int t = 0; t < NUM_THREADS; t++)
threadpool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
threadpool.join_all();
ioService.stop();
return;
挂断了
ioService.post(boost::bind(&swap, boost::ref(input), 2 * j + i % 2, 2 * j + 1 + i % 2));
错误提示
no matching function for call to ‘bind(<unresolved overloaded function type>, std::vector<int, std::allocator<int> >&, int, int)’
这看起来很奇怪,因为这些都没有重载,有人知道这是什么意思吗?
编辑:这是完整的程序
#include <iostream>
#include <chrono>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <algorithm>
#include <boost/thread.hpp>
#include <boost/asio/io_service.hpp>
#define NUM_THREADS 4
using namespace std;
using namespace boost;
using namespace boost::this_thread;
int check_solution(const vector<int>&);
void bubblesort(vector<int>&);
void swap1(vector<int>&, int, int);
void parallel_bubblesort(vector<int>&);
int main()
string line, token;
string file = "test.txt";
vector<int> unsorted_integers;
//print out filename
cout << file << endl;
ifstream myfile(file);
//open file
if(myfile.is_open())
//load everything into a vector
while (getline(myfile, line))
int temp;
std::istringstream ss(line);
std::getline(ss, token, '\n');
temp = atoi(token.c_str());
unsorted_integers.push_back(temp);
vector<int> unsorted_integers2(unsorted_integers);
//starts clock
std::chrono::high_resolution_clock::time_point start2 = std::chrono::high_resolution_clock::now();
//run the sort function and check for correctness
parallel_bubblesort(unsorted_integers2);
if(check_solution(unsorted_integers2))
cout << "The parallel sort solution is correct" << endl;
else
cout << "The parallel sort solution is incorrect" << endl;
//stops clock and prints times
std::chrono::high_resolution_clock::time_point end2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> total_time2 = std::chrono::duration_cast<std::chrono::duration<double>>(end2 - start2);
cout << "The parallel sort function took " << total_time2.count() << " seconds." << endl;
return 0;
void swap1(vector<int>& input, int i, int j)
if (input[i] > input[j])
int temp = input[j];
input[j] = input[i];
input[i] = temp;
return;
void parallel_bubblesort(vector<int>& input, int, int)
int i, j;
for (i = 0; i < input.size(); i++)
boost::asio::io_service ioService;
boost::thread_group threadpool;
for (j = 0; j < input.size() - 1; j++)
ioService.post(boost::bind(&swap1, boost::ref(input), 2 * j + i % 2, 2 * j + 1 + i % 2));
for (int t = 0; t < NUM_THREADS; t++)
threadpool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
threadpool.join_all();
ioService.stop();
return;
int check_solution(const vector<int>& solution)
vector<int> correct_solution(solution);
std::sort(correct_solution.begin(), correct_solution.end());
return (solution == correct_solution);
【问题讨论】:
您使用的是什么编译器和 boost 版本?带有 Boost 1.55 的 VC12 编译它没有问题。您也可能缺少include
,如果您提供了一个准备好尝试使用您的include
s 的sn-p 可能会有所帮助。
我正在使用命令 g++ bubblesort.cpp -std = c++0x -boost_thread-mt -lboost_system
将 -Wall -Werror 添加到您的编译行。
哦,很酷的技巧,这似乎很有希望这是输出:bubblesort.cpp: In function 'void bubblesort(std::vector您可能在某处做using namespace std;
,而std::swap
是一回事。我建议您只需将 swap
函数重命名为其他名称。
【讨论】:
感谢您的建议,但更改并没有解决问题 其实这是的问题。尝试将函数swap()
重命名为其他名称。
我刚刚删除了using namespace std;
并明确引用了std::vectors
并且错误消失了。
我重命名了 swap 并没有帮助
好吧,我们现在可能在不同的页面上使用代码。你能从你当前的代码中创建一个最小的 sn-p 来显示错误吗?以上是关于使用 boost::bind 的调用错误没有匹配的函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 boost::bind 将成员函数绑定到 boost::bisect?