Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio 2010中的boost::线程编译错误_C++_Multithreading_Visual Studio 2010_Boost - Fatal编程技术网

C++ Visual Studio 2010中的boost::线程编译错误

C++ Visual Studio 2010中的boost::线程编译错误,c++,multithreading,visual-studio-2010,boost,C++,Multithreading,Visual Studio 2010,Boost,很长一段时间以来,我第一次尝试使用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)

很长一段时间以来,我第一次尝试使用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)
    ]`
c:\myproj\boost\u 1\u 46\u 0\boost\thread\win32\thread\u heap\u alloc.hpp(97):错误C2061:语法错误:标识符“heap\u内存”
c:\myproj\boost\u 1\u 46\u 0\boost\thread\detail\thread.hpp(134):请参阅正在编译的函数模板实例化“T*boost::detail::heap\u new(A1&)”的参考
具有
[
T=boost::detail::thread\u数据,
F=无效(cdecl*)(无效),
A1=无效(uuu cdecl*)(无效)
]`
只需包含标题,它似乎与我的代码没有任何关系,但我看不出该怎么办,有人能帮忙吗?

有可能您包含了一些定义为“new”的其他包,这打破了Boost试图对new进行的操作。
要查看预处理后的代码,请使用/P或/E编译,然后在输出中搜索这一行,看看它是否不同。

是的,我知道问题所在。如果您正在使用MSVC向导,请确保包含boost标题,您可以从中找到感兴趣的内容

#include <boost/thread/thread.hpp>

我不知道boost内部的代码如何编译,它使用变量名(
heap\u memory
)作为类型转换:
void*const heap\u memory=allocate\u raw\u heap\u memory。。。T*const data=new(heap\u memory)T…
我以为我已经通过定义
BOOST\u NO\u RVALUE\u引用解决了这个问题,但这只是推迟了问题,直到我尝试调用一个带参数的构造函数。boost代码就是不合理!!VS2010确实有右值引用,所以这不是问题。
new(heap\u memory)
不是类型转换,而是新的位置。该对象是在*heap_内存中构造的,刚刚分配。在这个头之前包含了什么?我想我在头之前没有包含任何特殊的内容,我应该做什么?如果是这样的话,为什么boost不包括这种依赖性本身呢?
#ifdef _DEBUG
#define new DEBUG_NEW
#endif