我正在创建一个转换器,用于四元数到欧拉角,我写了这段代码:
//(...)
/*
* 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包含到我的项目中,我还将所有其他文件下载到我的项目中。
当我尝试编译项目时,我从Visual Studio 2012中收到以下错误消息:
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
但它造成了更多错误。
答案 0 :(得分:1)
错误显示您缺少某个功能:
Eul_FromQuat(struct Quat,int);
我在您提供的代码中没有看到该功能。
因此,您的编译器和我都认为它丢失了,并且是一个未解析的符号。
答案 1 :(得分:0)
如果是.c文件,则默认编译为C.
您必须更改该文件的“编译为”选项,或将extern "C"
添加到.h文件中的声明。