【发布时间】:2017-02-21 15:21:41
【问题描述】:
我正在使用 Eigen 库在 C++ 中创建和操作一些矩阵。 Eigen 已安装(Ubuntu 16.04)并且似乎正在运行。但是,当我在外部文件中将矩阵声明为类的一部分并且#include 是必要的文件时,它会失败。我的 KalmanFilter.h 头文件:
#include <Eigen/Dense>
using Eigen::MatrixXd;
class KalmanFilter {
public:
KalmanFilter(double, double);
double initialX, initialY;
MatrixXd m;
};
我的 KalmanFilter.cpp 文件:
#include <Eigen/Dense>
#include "KalmanFilter.h"
KalmanFilter::KalmanFilter(double inX, double inY) {
initialX = inX;
initialY = inY;
m(2, 1);
m << initialX, initialY;
}
当然还有我的 main.cpp:
#include <Eigen/Dense>
#include "Utilities/KalmanFilter.h"
int main() {
double a, b;
a = 1.0;
b = 2.0;
KalmanFilter KF(a, b);
}
一切正常编译,但运行它会导致断言错误:
main: /usr/local/include/Eigen/src/Core/DenseCoeffsBase.h:365: Eigen::DenseCoeffsBase<Derived, 1>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator()(Eigen::Index, Eigen::Index) [with Derived = Eigen::Matrix<double, -1, -1>; Eigen::DenseCoeffsBase<Derived, 1>::Scalar = double; Eigen::Index=long int]: Assertion 'row >= 0 && rows() && col >= 0 && col < cols()' failed. Aborted.
如果我将MatrixXd m(2, 1); 放在我的 KalmanFiter.cpp 文件中(重新声明它是 MatrixXd),则生成的编译会运行,但 m 矩阵是空的(它存在,但显然应该初始化它的下一行失败了默默)。我几乎肯定 Eigen 安装正确,因为在我的 main.cpp 中声明和初始化相同的MatrixXd 矩阵工作得很好。
我在这里缺少什么?
【问题讨论】: