使用带参数的Boost :: Thread时的编译器错误

时间:2012-06-10 13:27:15

标签: c++ boost

我非常感谢这里的任何帮助。我试图用Boost :: Thread异步调用一个函数,但是我遇到了一些错误。这是我的真实代码。

主要:

vector<std::string> a = ...;
vector<std::string> b = ...;
vector<boost::thread> threads;

threads.push_back(boost::thread(do_work, an_integer, a[i], b.begin(), b.end()));

// Later I will join()...

其他地方:

void do_work(int i, std::string a_string, vector<string>::iterator begin, vector<string>::iterator end)
{
    // Some stuff
}

我对这些东西很陌生,更习惯于C#。无论如何,这些是我得到的错误:

error C2664: 'void (int,std::string,std::_Vector_iterator<_Myvec>,std::_Vector_iterator<_Myvec>)' : cannot convert parameter 1 from 'std::_Vector_iterator<_Myvec>' to 'int'

error C2664: 'void (int,std::string,std::_Vector_iterator<_Myvec>,std::_Vector_iterator<_Myvec>)' : cannot convert parameter 3 from 'std::basic_string<_Elem,_Traits,_Ax>' to 'std::_Vector_iterator<_Myvec>'

error C2664: 'void (int,std::string,std::_Vector_iterator<_Myvec>,std::_Vector_iterator<_Myvec>)' : cannot convert parameter 4 from 'std::_Vector_iterator<_Myvec>' to 'std::_Vector_iterator<_Myvec>'

我非常感谢您提供的任何帮助。我几乎肯定会做一些非常无聊的事情!非常感谢。

1 个答案:

答案 0 :(得分:1)

该编译器错误表明b.begin()b.end()是不同类型,显然不能出现在您列出的代码中。重新检查您的代码,确保您没有将b定义为其他内容。 (另请检查an_integer,因为编译器认为它是迭代器。)