因此,我尝试使用CImg记录和显示图像,但我也使用名为Eigen的线性代数库。巧合的是,他们每个人似乎都有一个同名的宏,"成功"。我尝试过做#undef,但是没有顺利完成。因此,每当我尝试编译时,我都会收到这样的错误:"成功"在不同的文件中定义了两次。如何在不丢失任何宏的情况下删除此错误?非常感谢帮助!
答案 0 :(得分:2)
问题出现了,因为CImg包含X11标题X.h,它有一个名为"成功"定义。这个宏与Eigen中的ComputationInfo枚举定义冲突,因为它有一个名为"成功"的枚举值。
作为一种解决方法,您可以取消定义"成功"在包括CImg之后,包括Eigen之前:
#include <CImg/CImg.h>
#ifdef Success
#undef Success
#endif
#include <eigen3/Eigen/Eigen>
另见关于Eigen的bug追踪器的问题#253:http://eigen.tuxfamily.org/bz/show_bug.cgi?id=253
答案 1 :(得分:1)
Eigen和CImg都没有这样的#define。但是,Eigen确实在Eigen命名空间中有这样的枚举,所以问题更可能来自X11 X.h
头文件#define Success。
所以,如果你需要使用X11中的Success,那么在X11之前包含Eigen的标题(或者包含它的任何人)。
如果您需要Eigen的成功,那么请包括Eigen last,以及#undef Success。
答案 2 :(得分:1)
您可能还希望在包含cimg_display
之前将0
定义为"CImg.h"
(或将-Dcimg_display=0
标记放入,以显示CImg中X11头文件的包含内容编译时)。
当然,只有在不需要CImg的显示功能时才这样做。
答案 3 :(得分:0)
如果您的代码中不需要其中一个宏,则可以在{2}之间#undef
。因此,它实际上取决于您在您的代码中所需的内容。