我正在使用Eigen庫來創建和操縱C++中的一些矩陣。 Eigen安裝(Ubuntu 16.04),似乎正在工作。但是,當我在外部文件中聲明矩陣作爲類的一部分並且必要的文件時,它將失敗。我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
矩陣工作得很好。
我在這裏錯過了什麼?