Eigen提供了向量和矩阵运算的一套功能,提供开源源码,无需编译,其实现文件是.hxx和.cxx,以及一些.h文件。可以通过简单的控制台程序使用它,没有任何问题。但是将其集成到MFC中时,遇到了一个大问题:
我使用的是Eigen2,被一个机器人运动学算法库orocos-kdl调用,编译时报错:max和min函数发生冲突。
定位到Eigen\Core的第300多行:大意是如果已经定义了windows中的max()和min()函数
#error ... 请使用预编译#define NOMAXMIN来取消max()min()宏
解决方法:
1. VS工程属性——C/C++——预编译头,添加NOMAXMIN;
2. 在使用到Eigen2的文件中添加:
#ifndef NOMAXMIN
#define NOMAXMIN
#endif
另外,KDL中使用的命名空间的某些函数,如KDL::cos(), KDL::sin(), 和std::cos(), std::sin(),使用时要区分;在同一个cpp文件中,最好不要同时使用
using namespace std;
using namespace KDL;
而应当写成:
#include <cmath>
std::cos(para) z或者KDL::cos(para)
即在使用的时候注明命名空间,避免命名空间的混用