我试图将Eigen :: Vector4d传递给这样的函数:
Matrix3d quat2DCM(Vector4d quat)
{
quat = quat;
return Matrix3d::Identity();
//nevemind the guts of this function, that'l come after this works
}
VC ++ 2005编译器给出了以下错误:
错误C2719:'quat':带__declspec的形式参数(align('16'))将不会对齐
Eigen :: Vector3d对象不会作为参数发生。我注意到在一些在线讨论中,Vector4d类对于它的对齐特别挑剔,比其他罐装typedef更多。在类中使用Vector4d时,我发现有必要使用宏EIGEN_MAKE_ALIGNED_OPERATOR_NEW
来覆盖new
是否有类似的解决方法来传递它们的参数?
答案 0 :(得分:10)
根据Eigen的证明,传递固定大小的特征对象可以“be illegal or make your program crash”。这是因为当通过值传递对象时,不遵守对齐修饰符Eigen使用。您应该更改您的功能,以便它需要const
引用。
Matrix3d quat2DCM(const Vector4d& quat)
{
...
}