You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MFC时Boost DEBUG_NEW宏冲突编译错误的解决咨询

MSVC2019 + C++14下Boost Filesystem头文件与MFC DEBUG_NEW宏冲突的编译错误解决

问题现象

仅引入<boost/filesystem/path.hpp>头文件,使用MSVC2019以C++14 ISO标准编译时,触发两处编译错误:

  • 错误1:boost/system/detail/error_code.hpp第179行20列报C2061语法错误(标识符'd2_'),对应代码为:
    ::new( d2_ ) std::error_code( ec );
    
    注释该行后可正常编译。
  • 错误2:boost/system/detail/error_category_impl.hpp第131行16列报C2059语法错误('static_cast'),对应代码为:
    ::new( static_cast<void*>( stdcat_ ) ) boost::system::detail::std_category( this, system::detail::id_wrapper<0>() );
    

问题原因

该错误由MFC的DEBUG_NEW宏冲突导致。DEBUG_NEW会重定义new运算符,破坏了Boost代码中使用的**定位new(placement new)**语法结构,使得编译器无法正确解析相关代码。

解决方案

使用#pragma宏管理指令,临时取消DEBUG_NEW的定义,在包含Boost头文件后再恢复原宏定义,具体代码如下:

#pragma push_macro("new")
#undef new
#include <boost/filesystem/path.hpp>
#pragma pop_macro("new")

内容的提问来源于stack exchange,提问作者Jimmy Loyola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:44:54