2011-02-28 197 views
4

我想在很长一段时间内第一次使用boost,并且当我包含boost/thread.hpp头文件时,在boost本身内部出现编译错误:在Visual Studio 2010 boost :: thread编译错误

c:\myproj\boost_1_46_0\boost\thread\win32\thread_heap_alloc.hpp(97): error C2061: syntax error : identifier 'heap_memory 
    c:\myproj\boost_1_46_0\boost\thread\detail\thread.hpp(134) : see reference to function template instantiation 'T *boost::detail::heap_new<boost::detail::thread_data<F>,void(__cdecl *)(void)>(A1 &&)' being compiled 
    with 
    [ 
     T=boost::detail::thread_data<void (__cdecl *)(void)>, 
     F=void (__cdecl *)(void), 
     A1=void (__cdecl *)(void) 
    ]` 

发生这种情况只是通过包含标题,它似乎没有任何关系与我的代码,但我不明白该怎么办,任何人都可以帮助吗?

+0

我怎么没看到boost内部的代码可以编译,它使用变量名('heap_memory')作为类型转换: 'void * const heap_memory = allocate_raw_heap_memory ... T * const data = new(heap_memory)T .... ' –

+0

我以为我有w通过定义'BOOST_NO_RVALUE_REFERENCES'来引发这个问题,但是这只是推迟了这个问题,直到我试图调用一个带参数的构造函数。升压代码只是不明智! –

+1

VS2010确实有右值引用,所以这不是问题。 'new(heap_memory)'不是一个类型转换,而是一个新的位置。该对象构建于* heap_memory,刚分配。 –

回答

3

有可能你包含了一些其他的包含'new'的#define的包,然后打破Boost试图用新的布局来做的事情。 要在预处理后查看代码,请使用/ P或/ E进行编译,然后在输出中搜索此行并查看它是否看起来不同。

5

感兴趣的东西。如果你使用的MSVC向导,确保包括生成的块之前升压头

#include <boost/thread/thread.hpp> 

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif