Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在我自己的C+类中正确使用矩阵(特征库)+;?_C++_Class_Matrix_Vector_Eigen - Fatal编程技术网

C++ 如何在我自己的C+类中正确使用矩阵(特征库)+;?

C++ 如何在我自己的C+类中正确使用矩阵(特征库)+;?,c++,class,matrix,vector,eigen,C++,Class,Matrix,Vector,Eigen,我真的试图解决这个问题,我在这里读了很多关于Stackoverflow的QA,但不知怎么的,没有什么真正的帮助 我正试图用它自己的矩阵和向量从特征库实现一个类。我将代码::块与GNU GCC编译器一起使用 这是一个简单的示例,说明了我的意思,但它不是确切的代码,因为我使用了更多的矩阵和向量以及其他大小(4x4矩阵、2x4矩阵、4x1向量和2x1向量): 1.当我创建MYCLASS的对象时,如下所示: ==>编译是很好的,但当它运行时,程序会以某种方式崩溃,具体描述如下(请记住,我还有其他矩阵和向

我真的试图解决这个问题,我在这里读了很多关于Stackoverflow的QA,但不知怎么的,没有什么真正的帮助

我正试图用它自己的矩阵和向量从特征库实现一个类。我将代码::块与GNU GCC编译器一起使用

这是一个简单的示例,说明了我的意思,但它不是确切的代码,因为我使用了更多的矩阵和向量以及其他大小(4x4矩阵、2x4矩阵、4x1向量和2x1向量): 1.当我创建MYCLASS的对象时,如下所示: ==>编译是很好的,但当它运行时,程序会以某种方式崩溃,具体描述如下(请记住,我还有其他矩阵和向量):

断言失败:索引>=0&&index 此应用程序已请求运行时在 不寻常的方式。请联系

进程返回3(0x3)执行时间:2.131秒

2.如果我在构造器的开头加上: ==>然后在构造对象时==>没有错误

==>但是当我想使用函数get_matval访问(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;
}
MYCLASS::MYCLASS(双deltaT、双q\u var、双r1\u var、双r2\u var)
:x(4),A(2,2){//使用初始值设定项列表来构造x和A

x
VectorXd x(4);
在构造函数中创建一个新的局部变量,该变量与类中的
x
变量没有关系。看起来您需要在添加元素之前设置大小。对eigen库一无所知,我希望您至少可以在构造函数初始值设定项列表中这样做。查看文档中有一个esize()函数,该函数还可以让您初始化大小。嘿,我不敢相信,但这真的很有帮助!我只需要在构造函数开始时调整矩阵和向量的大小!例如,A.resize(2,2)谢谢。但是,谢谢。但是如果我有20个矩阵,那该怎么办?这就是我要去的方法吗?我的初始化列表中有20个矩阵吗?如果你有很多矩阵,你应该考虑把它们存储到<代码> STD::vector < /代码>。但是初始化初始化列表中的20个变量是没有问题的。(我不知道最小值是多少,但符合标准的编译器必须支持)
    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...
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;
}