1,背景
创建静态链接MFC的dll项目,其中用到了CImage。
编译报错:
1>D:\Windows Kits\10\Include\10.0.19041.0\um\GdiplusTypes.h(479,22): error C3861: “min”: 找不到标识符
1>D:\Windows Kits\10\Include\10.0.19041.0\um\GdiplusTypes.h(480,23): error C3861: “min”: 找不到标识符
1>D:\Windows Kits\10\Include\10.0.19041.0\um\GdiplusTypes.h(481,21): error C3861: “max”: 找不到标识符
1>D:\Windows Kits\10\Include\10.0.19041.0\um\GdiplusTypes.h(482,20): error C3861: “max”: 找不到标识符
1>D:\Windows Kits\10\Include\10.0.19041.0\um\GdiplusTypes.h(503,22): error C3861: “max”: 找不到标识符
网上的方法大同小异,都是让你自行定义min、max,仔细探究发现这些答案源头来自StackOverflow的这篇问答
很不巧,我试了要么没用,要么引出了更多问题
2,分析
CImage在 “atlImage.h"中声明,
打开 “atlImage.h"发现里面有 #include <gdiplus.h>
打开 “gdiplus.h"发现里面有 #include "GdiplusTypes.h"
而 "GdiplusTypes.h"里除了有 min、 max,还有Size、 Point这些和opencv容易混淆的东西
3,对策
对策很简单,我原本在xxx.h里的 #include <AtlImage.h> 挪到xxx.cpp里即可。
这样就免得xxx.h被重复包含后搞出奇奇怪怪的问题了。
之所以想到这么干,就是观察了微软官方samples里的案例。