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 が使用する配置修飾子が考慮されないためです。const代わりに参照を取るように関数を変更する必要があります。

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