我在这里使用了特征库: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;
答案 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;