好的.. 首先,我不得不说我正在使用 BOOST 及其源代码(我必须这样做)。我既是 BOOST 又是 C++ 新手,但我对编码并不陌生(我更习惯于托管语言)。我在一个有点大的项目中遇到了这个问题,然后我在我在这里展示的这个小代码片段中重现了它:
#include <boost/thread.hpp>
void foo(int bar) {
printf("Chu %d!",bar);
}
int main() {
boost::thread_attributes attrs;
boost::thread causeTrouble(attrs,foo,42); // <-- Probably problematic line
causeTrouble.join();
}
根据BOOST 1.52.0 文档,这个片段应该既可以编译又可以正常运行;但是,它在 BOOST 库头文件中给了我一个奇怪的编译问题(不存在其他错误或警告):
<boost_path>/bind/bind.hpp:313: error: no match for call to '(boost::thread_attributes) (void (*&)(int), int&)
对我来说,看起来没有实际的 boost::thread(boost::thread_attributes,F f) 构造函数,即使它应该根据先前链接的文档。无论如何,有趣的是以下两行都可以正常编译:
boost::thread noTrouble(attrs,foo);
和
boost::thread noTroubleEither(foo,42);
即使我彻底搜索了 StackOverflow 和互联网的其余部分,我也不知道该从哪里转头 :( 事实上这是我第一次被迫提出一个新问题。求助!