【发布时间】:2011-02-28 21:14:30
【问题描述】:
我很长一段时间以来第一次尝试使用 boost,当我包含 boost/thread.hpp 标头时,我在 boost 本身中得到一个编译错误:
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)
]`
仅包含标题就会发生这种情况,它似乎与我的代码没有任何关系,但我不知道该怎么做,有人可以帮忙吗?
【问题讨论】:
-
我看不出 boost 中的代码是如何编译的,它使用变量名 (
heap_memory) 作为类型转换:void* const heap_memory=allocate_raw_heap_memory... T* const data = new (heap_memory) T.... -
我以为我已经通过定义
BOOST_NO_RVALUE_REFERENCES解决了这个问题,但这只是推迟了问题,直到我尝试调用一个带参数的构造函数。升压代码是不明智的! -
VS2010 确实有右值引用,所以这不是问题。
new (heap_memory)不是类型转换,而是新的展示位置。该对象是在 *heap_memory 上构造的,刚刚分配。 -
你在这个标题之前包含了什么?
-
我认为我在标题之前没有包含任何特殊内容,我应该这样做吗?如果是这样,为什么 boost 不包含该依赖项本身?
标签: c++ multithreading visual-studio-2010 boost