使用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
相关产品推荐
相关产品推荐

