0

クォータニオンからオイラー角へのコンバーターを作成しています。次のコードを記述しました。

//(...)
/*
* Converter Includes
*/
#include "EulerAngles.h"
//(...)
static cell AMX_NATIVE_CALL n_QuatToEuler( AMX* amx, cell* params )
{
    Quat q;
    q.x = amx_ctof(params[1]);
    q.y = amx_ctof(params[2]);
    q.z = amx_ctof(params[3]);
    q.w = amx_ctof(params[4]);
    EulerAngles EU = Eul_FromQuat(q,params[5]);
    //(...)
    return 1;
}
//(...)

http://tog.acm.org/resources/GraphicsGems/gemsiv/euler_angle/のEulerAngles.cをプロジェクトに含め、他のすべてのファイルもプロジェクトにダウンロードしました。

プロジェクトをコンパイルしようとすると、VisualStudio2012から次のエラーメッセージが表示されます。

Error   1   error LNK2001: unresolved external symbol "struct Quat __cdecl Eul_FromQuat(struct Quat,int)" (?Eul_FromQuat@@YA?AUQuat@@U1@H@Z)    .\calculatorSAMP\calculatorSAMP.obj calculatorSAMP
Error   2   error LNK1120: 1 unresolved externals   .\calculatorSAMP\Release\calculatorSAMP.dll calculatorSAMP

EulerAngles.hに含まれているQuadTypes.hのコードは次のとおりです。

/**** QuatTypes.h - Basic type declarations ****/
#ifndef _H_QuatTypes
#define _H_QuatTypes
/*** Definitions ***/
typedef struct {float x, y, z, w;} Quat; /* Quaternion */
enum QuatPart {X, Y, Z, W};
typedef float HMatrix[4][4]; /* Right-handed, for column vectors */
typedef Quat EulerAngles;    /* (x,y,z)=ang 1,2,3, w=order code  */
#endif

ここで何が欠けていますか?

私はそれを次のように編集しようとしました:

/**** QuatTypes.h - Basic type declarations ****/
#ifndef _H_QuatTypes
#define _H_QuatTypes
/*** Definitions ***/
struct Quat {float x, y, z, w;}; /* Quaternion */
enum QuatPart {X, Y, Z, W};
typedef float HMatrix[4][4]; /* Right-handed, for column vectors */
#define EulerAngles Quat ;    /* (x,y,z)=ang 1,2,3, w=order code  */
#endif

しかし、それはより多くのエラーを引き起こしました。

4

2 に答える 2

1

エラーは、関数が欠落していることを示しています:

Eul_FromQuat(struct Quat,int);

あなたが提供したコードにはその機能がありません。

したがって、あなたのコンパイラと私は、それが欠落しており、未解決のシンボルであると結論付けています。

于 2012-11-24T23:13:52.053 に答える
0

.c ファイルの場合、デフォルトで C としてコンパイルされます。

そのファイルの「compile as」オプションを変更するかextern "C"、.h ファイルの宣言に追加する必要があります。

于 2012-11-25T00:31:27.147 に答える