[英]In C++'s Eigen library, how do I solve: invalid use of incomplete type ‘const class Eigen::MatrixSquareRootReturnValue<Eigen::Matrix<float, -1, -1> >’
[英]How to correctly use a matrix (Eigen library) in my own class in C++?
我確實試圖解決此問題,並且在Stackoverflow上閱讀了很多QA,但實際上並沒有任何幫助。
我正在嘗試使用Eigen庫中的矩陣和向量來實現Class。 我在GNU GCC編譯器中使用Code :: Blocks。
class MYCLASS{
private:
VectorXd x;
MatrixXd A;
public:
MYCLASS(double, double, double, double);
double get_matval();
};
MYCLASS::MYCLASS(double deltaT, double q_var, double r1_var, double r2_var){
x_m(0)=q_var;
x_m(1)=r1_var;
x_m(2)=r2_var;
x_m(3)=0.0;
A(0,0)= deltaT;
A(0,1)= 0.0;
A(1,0)= 0.0;
A(1,1)= 0.0;
}
double MYCLASS::get_matval(){
return A(0,0);
}
MYCLASS myobject(10, 0.5, 0.1, 0.75);
==>編譯是好的,但是當它運行時,程序將以以下確切描述崩潰(請記住,我還有其他矩陣和向量):
斷言失敗:索引> = 0 &&索引<size(),文件F:...... / Eigen / src / Core / DenseCoeffsBase.h,第425行
該應用程序已請求運行時以一種異常方式終止它。 請聯系...
進程返回3(0x3)執行時間:2.131 s
MYCLASS::MYCLASS(double deltaT, double q_var, double r1_var, double r2_var){
VectorXd x(4);
MatrixXd A(2,2);
x_m(0)=q_var;
x_m(1)=r1_var;
...and so on...
==>然后在構造對象時==>沒有錯誤
==>但是當我隨后想要使用函數get_matval訪問A(0,0)時,如下所示:
MYCLASS myobject(10, 0.5, 0.1, 0.75);
double myvar = myobject.get_matval();
...它再次崩潰,並顯示相同的錯誤消息。
你們能幫忙嗎?
即使您已經找到解決方案,也可以通過以下方法正確初始化(有限數量的)本征矩陣:
MYCLASS::MYCLASS(double deltaT, double q_var, double r1_var, double r2_var)
: x(4), A(2,2) { // use initializer list to construct x and A
x << q_var, r1_var, r2_var, 0.0;
A << deltaT, 0.0, 0.0, 0.0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.