2011-02-28 191 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