用“逗号初始化”初始化静态特征矩阵

时间:2013-04-23 14:44:18

标签: c++ eigen

我在这里使用了特征库:http://eigen.tuxfamily.org/index.php?title=Main_Page

尝试编译时,会返回

error: expected constructor, destructor, or type conversion before '.'

抱怨我将xaxis ... zaxis添加到矩阵的行。它是否可能是因为gcc4.3(我正在使用的编译器)不喜欢这种类型的初始化,因为点通常是一个函数调用(它不适用于未初始化的对象)?

但对我来说,它似乎完全遵循这里的教程示例:http://eigen.tuxfamily.org/dox/TutorialAdvancedInitialization.html,除了静态,但没有它的错误是相同的。我尝试使用逗号分隔初始化,但同样也是如此。

// axis system
static Eigen::Matrix<double, 3, 1>    s_xAxis(1.,0.,0.);            //!< global x Axis;
static Eigen::Matrix<double, 3, 1>    s_yAxis(0.,1.,0.);            //!< global y Axis;
static Eigen::Matrix<double, 3, 1>    s_zAxis(0.,0.,1.);            //!< global z Axis;

// origin
static Eigen::Matrix<double, 3, 1>    s_origin(0.,0.,0.);           //!< origin position

static Eigen::Matrix<double, 3,3>     s_idRotationZinverse;
s_idRotationZinverse.col(0) << s_yAxis;
s_idRotationZinverse.col(1) << s_xAxis;
s_idRotationZinverse.col(2) << -s_zAxis;

2 个答案:

答案 0 :(得分:1)

哦,我知道了。

此代码:

s_idRotationZinverse.col(0) << s_yAxis;

不是声明;这是一个必须在函数体内的声明。

你可能试图在任何函数之外执行它,这在语法上是不正确的causes the error you mentioned

您可能已被Eigen文档欺骗,该文档将此语法称为“逗号初始化”,它应该是“逗号分配”左右。初始化是指在定义变量时为变量赋值,而不是单独的步骤。初始化在语法上是声明的一部分,因此可以在函数体之外完成。

我建议派Eigen支持新的基于std::initializer_list的初始化(如果还没有完成)并提交拉取请求。

答案 1 :(得分:0)

你试过了吗?

s_idRotationZinverse.col(0) = s_yAxis;