从标准向量到特征/密集向量的矩阵
我尝试读出使用向量的标准C++动态容器创建的3D矩阵中的元素。 下面是我如何初始化我的矩阵:从标准向量到特征/密集向量的矩阵
typedef vector<vector<vector<ClassA> > > matrix3D;
在我命名为 “ClassA的” 类,我有以下公共成员:
double a, b, c;
然后在我的主文件中填入矩阵:
double varA=M_PI; double varB=varA; double varC=varA;
matrix3D[i][j][k].a = varA;
matrix3D[i][j][k].b = varB;
matrix3D[i][j][k].c = varC;
现在,当我读双打到载体中使用本征/密库中创建,载体的类型成为矩阵:
Vector3d vectorEigen;
vectorEigen << matrix3D[i][j][k].a, matrix3D[i][j][k].b, matrix3D[i][j][k].c;
和vectorEigen
变成了这种类型的变量Eigen::Matrix<double, 3,1,0,3,1>
有没有人知道我在这里错过了什么?
内部Eigen将矢量表示为仅有一列的矩阵。因此,矢量(就像“普通”矩阵)实际上是一个Eigen::Matrix
模板类的实例。
然而,为了简化程序员,Eigen使用C++的typedef
来定义具有特定选项的Eigen::Matrix<>
的同义词的向量类。例如,Vector3d
类型在Eigen
为其元素是double
个矩阵typedef和具有3行1列:
typedef Matrix<double, 3, 1> Vector3d
的Matrix模板类实际上具有6个模板参数,最后3周的莫过于默认参数。下面是完整的签名:
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
class Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >
如果编译器是指Eigen::Matrix<double, 3,1,0,3,1>
错误消息时在谈论一个Eigen::Matrix
与下面的模板参数:
-
_Scalar
=双 -
_Rows
= 3 -
_Cols
= 1 -
_Options
= 0(by defa ULT) -
_MaxRows
=_Rows
(默认)= 3 -
_MaxCols
=_Cols
(默认)= 1
所以Eigen::Matrix<double, 3,1,0,3,1>
只是用全类型的Vector3d
编译器解决typedef
和模板之后看到参数。
类型没有任何变化,您只需在代码中使用Vector3d
速记符号,而编译器通过其显式类型引用它。
感谢您的回复 问题是,我需要'vectorEigen'作为一个函数的输入,它需要一个Vector3d输入参数,编译器会在该行的那一行中声明该函数被调用:functionA(vectorEigen),其原因是'undefined reference',因为输入类型不匹配。 – bull
@bull您是否包含正确的Eigen头文件?例如'#include
我包括'
C++是一种静态类型语言。变量不会“变成”不同的类型。 –
我认为有关'vectorEigen'类型的问题不再是真正的问题。也许你正在摔跤一些其他问题?实际上,你不需要'vectorEigen WhiteViking
'vectorEigen '是undefined – bull