0

ここで Eigen Library を使用しています: 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 のドキュメントにだまされたかもしれませんが、「カンマ代入」などである必要があります。初期化とは、個別のステップとしてではなく、定義時に変数に値を与えることです。初期化は構文的に宣言の一部であるため、関数本体の外で実行できます。

Eigen をフォークして新しい にstd::initializer_list基づく初期化をサポートし (まだ完了していない場合)、プル リクエストを送信することをお勧めします。

于 2013-04-24T11:13:14.103 に答える
0

やってみました:

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