Почему я получаю ошибку Unresolved External Symbol, когда присутствует typedef?

Я создаю конвертер для кватернионов в углы Эйлера, я написал этот код:

//(...)
/*
* 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;
}
//(...)

Я включил EulerAngles.c из http://tog.acm.org/resources/GraphicsGems/gemsiv/euler_angle/ в свой проект, я также загрузил все остальные файлы в свой проект.

Когда я пытаюсь скомпилировать свой проект, я получаю следующие сообщения об ошибках из 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

QuadTypes.h, включенный в EulerAngles.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

Решение

Если это файл .c, по умолчанию он компилируется как C.

Вы должны либо изменить опцию «compile as» для этого файла, либо добавить extern "C" к объявлению в .h файле.

0

Другие решения

Ошибка говорит, что вам не хватает функции:

Eul_FromQuat(struct Quat,int);

Я не вижу эту функцию в коде, который вы предоставили.

Итак, и ваш компилятор, и я пришли к выводу, что он отсутствует и является неразрешенным символом.

1

По вопросам рекламы ammmcru@yandex.ru