【发布时间】:2017-11-03 04:08:07
【问题描述】:
我确实尝试过解决这个问题,并且我在 Stackoverflow 上阅读了很多 QA,但不知何故没有任何帮助。
我正在尝试使用 Eigen 库中的自己的矩阵和向量来实现一个类。我正在使用带有 GNU GCC 编译器的 Code::Blocks。
这是我的意思的一个简单示例,但它不是确切的代码,因为我使用了更多的矩阵和向量以及其他大小(4x4 矩阵、2x4 矩阵、4x1 向量和 2x1 向量):
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);
}
1.当我创建一个MYCLASS的对象时,像这样:
MYCLASS myobject(10, 0.5, 0.1, 0.75);
==> 编译很好,但是当它运行时,程序会因以下确切描述而崩溃(请记住,我还有其他矩阵和向量):
断言失败:index >= 0 && index
此应用程序已请求运行时终止它 不寻常的方式。请联系...
进程返回 3 (0x3) 执行时间:2.131 s
2. 如果我在构造函数的开头加上这个:
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();
...它再次崩溃并显示相同的错误消息。
你们能帮忙吗?
【问题讨论】:
-
VectorXd x(4);在您的构造函数中创建一个新的局部变量,该变量与您的类中的x变量无关。 -
看起来你需要在添加元素之前设置大小。我对 eigen 库一无所知,我希望您至少可以在构造函数初始化列表中做到这一点。
-
查看文档有一个 resize() 函数,它也可以让你初始化大小。 eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html
-
嘿,我不敢相信,但这真的很有帮助!我只需要在构造函数的开头调整矩阵和向量的大小!例如A.调整大小(2,2)。那行得通!非常感谢!
标签: c++ class matrix vector eigen