【问题标题】:boost::thread compilation error in Visual Studio 2010Visual Studio 2010 中的 boost::thread 编译错误
【发布时间】: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


【解决方案1】:

如果您使用的是 MSVC 向导,请确保包含 boost 标头

#include <boost/thread/thread.hpp>

在生成块之前

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

【讨论】:

    【解决方案2】:

    您可能#included 了其他一些#define 为“new”的包,这会破坏 Boost 尝试对放置 new 进行的操作。 要查看预处理后的代码,使用 /P 或 /E 进行编译,然后在输出中搜索此行,看看它是否看起来不同。

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多