3

我正在尝试将 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是否有类似的解决方法来传递它们的参数?

4

1 回答 1

11

根据 Eigen 的文档,传递固定大小的 eigen 对象可能“是非法的或使您的程序崩溃”。这是因为当对象按值传递时,不遵守 Eigen 使用的对齐修饰符。您应该更改您的函数,以便它const改为引用。

Matrix3d quat2DCM(const Vector4d& quat)
{
    ...
}
于 2012-02-06T23:13:36.730 回答