C++ Boost池malloc()和free()编译器错误
我正在使用Boost 1.58 64位,VC++2013,64位项目。使用Boost::pool 以前使用过Boost 1.54,调用时没有问题:C++ Boost池malloc()和free()编译器错误,c++,boost,C++,Boost,我正在使用Boost 1.58 64位,VC++2013,64位项目。使用Boost::pool 以前使用过Boost 1.54,调用时没有问题: boost::pool malloc() 及 现在,两种方法都是: 错误C2039:“\u malloc\u dbg”:不是的成员 'boost::pool' 及 错误C2039:“\u free\u dbg”:不是“boost::pool”的成员 因此 我是否错过了使编译器将malloc和free视为池类成员的任何指令 更新: 我发现它只发
boost::pool malloc()
及
现在,两种方法都是:
错误C2039:“\u malloc\u dbg”:不是的成员
'boost::pool'
及
错误C2039:“\u free\u dbg”:不是“boost::pool”的成员
因此
我是否错过了使编译器将malloc和free视为池类成员的任何指令
更新:
我发现它只发生在头内联方法中。如果我在.cpp中调用它们,我就没有错误
例如:
inline void* MemoryManager::AllocMemory(){
return m_pool->malloc();
}
抛出编译器错误。来自Windows的crtdbg.h包含以下行:
#ifdef _CRTDBG_MAP_ALLOC
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
...
尝试#取消定义(CRTDBG)映射(ALLOC)
编辑:
\define\u AFX\u NO\u DEBUG\u CRT
应防止crtdbg.h
被包括在内。将其添加到项目设置中,或在包含任何Windows标题之前添加。crtdbg.h
来自Windows的包含以下行:
#ifdef _CRTDBG_MAP_ALLOC
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
...
尝试#取消定义(CRTDBG)映射(ALLOC)
编辑:
\define\u AFX\u NO\u DEBUG\u CRT
应防止crtdbg.h
被包括在内。将其添加到项目设置中,或者在包含任何Windows标题之前。这将是一些宏重新定义malloc,请尝试在标题中取消malloc。这看起来像是问题所在,但我想知道是否有比使用“取消定义”(或者可能是更残酷的强制:)更残酷的强制解决方案)不使用重新定义malloc的糟糕库将是一个开始。@MichaelIV:我没有把Boost称为“糟糕库”。您正在使用另一个库,它将malloc
重新定义为宏,并在boost::pool
中破坏此成员。这就是为什么会出现编译错误。通过预处理器运行您的代码,您就会看到。叹气吧,好吧,您知道的最好。这将是一些宏重新定义malloc,尝试在header中#undef malloc这看起来是个问题,但我想知道是否有比使用#undef(或者更残酷的武力:)更残酷的武力解决方案)不使用重新定义malloc的糟糕库将是一个开始。@MichaelIV:我没有把Boost称为“糟糕库”。您正在使用另一个库,它将malloc
重新定义为宏,并在boost::pool
中破坏此成员。这就是为什么会出现编译错误。通过预处理器运行您的代码,您就会看到。叹气吧,好吧,那您就知道了。有趣的是@Lightness Races对它所说的话。也不起作用。将其放入项目属性预处理器。如果您将其作为stdafx.h
的第一行,还有clean+rebuild?我不使用预编译的标题。我会将您的答案标记为正确的,但对我来说仍然没有帮助。有趣的是@Lightness Races对此有何评论。也不起作用。将其放入项目属性预处理器。如果您将其作为stdafx.h
的第一行,还有clean+rebuild?我不使用预编译头。我会将您的答案标记为正确答案,但对我来说仍然没有帮助。