Visual Studio在Debug模式下,MFC工程中包含Eigen库时的定义冲突的问题

Visual Studio在Debug模式下,MFC工程中包含Eigen库时的定义冲突的问题

报错信息

Eigen\src\Core\PlainObjectBase.h(143,5): error C2061: 语法错误: 标识符"THIS_FILE"

Eigen\src\Core\PlainObjectBase.h(143,1): error C2333: "Eigen::PlainObjectBase::operator new": 函数声明中有错误;跳过函数体

Eigen\src\Core\CwiseNullaryOp.h(341,27): error C2039: "setConstant": 不是 "Eigen::PlainObjectBase" 的成员

以上仅仅列举了一部分报错信息。当Visual Studio编译报错时,不要看"错误列表窗口",而要看"输出"窗口。在输出窗口中搜索"error",找到第一个报错信息的位置,能最快找出错误原因。

如下图所示:

解决方法

根据报错信息,"THIS_FILE"是MFC在debug模式下启用的一个宏,方便调试时确定内存泄漏位置,看来报错信息与它有关。

THIS_FILE一同定义的宏还包括DEBUG_NEW等。猜想是DEBUG_NEW重载了new运算符,而Eigen中也重载了new运算符,在DEBUG_NEW后包含Eigen就会导致new定义不清的错误。

所以尝试将Eigen的包含位置放到DEBUG_NEW定义之前。具体而言,找到包含Eigen的代码中的DEBUG_NEW宏定义位置,如下所示:

cpp 复制代码
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

将包含语句放在该代码段之前即可。如果不需要检测内存泄漏,也可以直接删去这段代码。

如果在其他地方遇到此类问题,解决方法无外乎调整Eigen的包含位置,在包含其他各类库之前包含它。例如,在包含boost相关头文件之前包含Eigen/Core

相关推荐
周末也要写八哥13 小时前
Eclipse 2024全流程网盘下载与安装配置教程详解
java·ide·eclipse
ChampaignWolf17 小时前
在 Eclipse 中使用 Tabnine
java·ide·eclipse
诗水人间19 小时前
VsCode 中使用Copilot调用Deepseek V4模型
ide·vscode·copilot
梦想家加一19 小时前
vscode为什么下载了汉化插件却不生效
ide·vscode·编辑器
我不是懒洋洋20 小时前
【C++】类和对象( 类的定义、实例化、 this指针、 C++和C语言实现Stack对比)
c语言·开发语言·数据结构·c++·经验分享·算法·visual studio
NiceCloud喜云21 小时前
Claude API 流式输出(SSE)实战:从打字机效果到工具调用全流程
java·前端·ide·人工智能·chrome·intellij-idea·状态模式
多云的夏天21 小时前
IDE-VSCODE-Continue + DeepSeek V4
ide·vscode·编辑器·deepseek
Mr -老鬼21 小时前
EasyClick AI全自动编程,AI IDE选型真难?
ide·人工智能·自动化·ai编程·easyclick·易点云测
薛定猫AI1 天前
【深度解析】Antigravity 2.0:从 AI IDE 到 Agent 编排层,Google 开发者工具栈的技术转向
ide·人工智能
一条泥憨鱼1 天前
Stream流-从进阶到起飞
java·ide·后端·stream