0

我在这里使用 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;
4

2 回答 2

1

哦,我明白了。

这段代码:

s_idRotationZinverse.col(0) << s_yAxis;

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

您可能试图在任何函数之外执行它,这在语法上不正确并导致您提到的错误

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

我建议 fork Eigen 以支持std::initializer_list基于 new 的初始化(如果尚未完成)并提交拉取请求。

于 2013-04-24T11:13:14.103 回答
0

你有没有尝试过:

s_idRotationZinverse.col(0) = s_yAxis;
于 2013-04-23T15:30:33.687 回答