Step 2: シミュレータを作ろう 25万アクセス
2 月 08
講義でODEに関する演習をやってみて学生のプログラムで良く見かけるエラーメッセージとその対策を紹介します。
  1. bounce.cpp: In function `void makeBall()’: bounce.cpp:70: error: `radius’ undeclared (first use this function) bounce.cpp:70: error: (Each undeclared identifier is reported only once for each function it appears in.) make: *** [bounce.o] Error 1 70行目のradiusが宣言されていません(undeclared)。この関数で初めて使われています。 radiusをどこかで宣言してください。または,スペルミスの可能性もあります。
  2. ../../include/ode/mass.h:63: error: too few arguments to function `void dMassSetCylinderTotal(dMass*, dReal, int, dReal, dReal)’ bounce.cpp:78: error: at this point in file make: *** [bounce.o] Error 1 引数(argumen)の数が足りないというエラーです。dMassSetCylinderTotalをODE本で調べましょう。3番目の引数は円柱の長軸方向です。姿勢を指定しないと長軸方向がZ軸なので,その場合は3を代入します。
  3. bounce.cpp: In function `void makeBall()’: bounce.cpp:70: error: ’struct MyObject’ has no member named ’sides’ make: *** [bounce.o] Error 1 MyObject構造体(struct)のメンバー(member)にsidesがないという意味です。構造体の宣言と70行目の変数を確認しましょう。
  4. bounce.cpp: In function `void simLoop(int)’: bounce.cpp:59: error: cannot convert `double’ to `const double*’ for argument `3′ to `void dsDrawBoxD(const double*, const double*, const double*)’ make: *** [bounce.o] Error 1 doubleをconst double *へ変換できないと怒っています。具体的には,kdsDrawBoxDの3番目の引数(argument)の使い方が間違っています。それにはconst doubleへのポインタを入れてください。 なお,ODE本で調べると3番目の引数はconst float sides[3]になっています。これは配列へのポインタを入れなさいということです。つまり,直方体の3辺が格納されている配列名を入れてください。配列名は配列が格納されている先頭アドレスでしたね。
  5. ODE INTERNAL ERROR1 assertion “dMassCheck(mass)” failed in dBodySetMass() [ode.cpp] これはソースコードの文法には間違いがありません。dBodySetMass()でボディに質量パラメータを設定するわけですが,このエラーは質量パラメータの計算に問題があります。たとえば,dMassSet***Total()の引数になる質量や半径,長さなどの変数を初期化しないで使っていたり,あるいは間違って0などを代入していませんか?
投稿:08年02月08日

Leave a Reply

カウンタ (since 2008-1-11)
Copyright © 1998-2008    Kosei Demura