Подходит, чтобы задать вопрос. Почему я получаю сообщение об ошибке с таким кодом?Как решить неопределенную ссылку на функцию FuzzyObject :: InitializeObj()?
FuzzyObject.h:
#ifndef FUZZYOBJECT_H
#define FUZZYOBJECT_H
#include <iostream>
#include <d3d9.h>
#include <d3dx9.h>
class FuzzyObject {
public:
FuzzyObject();
typedef struct tagFMaterial* FMaterial;
typedef struct tagFMesh* FMesh;
typedef struct tagFuzzyForm {
D3DXVECTOR3 pos;
D3DXVECTOR3 rot;
D3DXVECTOR3 scale;
D3DXVECTOR3 forward;
D3DXVECTOR3 up;
} FuzzyForm;
typedef struct tagObject* Object;
typedef enum ObjectType {
FO_STATIC = 0,
FO_ANIM = 1,
FO_OBJ = 2,
FO_CAMERA = 3,
FO_LIGHT = 4
} Type;
typedef enum ObjectCollider {
BOX = 0,
SPHERE = 1,
MESH = 2
} Collider;
static FuzzyObject::Object InitializeObj(std::string ObjName, FuzzyObject::ObjectType type, bool render, FuzzyObject::FuzzyForm xform);
D3DXMATRIX UpdateTransform(FuzzyObject::FuzzyForm xform, FuzzyObject::Object camera);
void UpdateObject(Object);
~FuzzyObject();
};
#endif
FuzzyObject.cpp:
#include <d3d9.h>
#include <d3dx9.h>
#include <iostream>
#include <FuzzyObject.h>
#include <Personality.h>
#include <GFX.h>
#include <d3d9.h>
#include <d3dx9.h>
struct tagFMesh{
LPD3DXMESH mesh;
LPD3DXBUFFER adjBuf;
LPD3DXBUFFER materialBuf;
};
struct tagFMaterial {
LPD3DXEFFECT Shader;
LPDIRECT3DTEXTURE9 texture0, texture1, texture2;
LPDIRECT3DTEXTURE9 bump0, bump1, bump2;
D3DXVECTOR4 Color;
D3DXMATRIX MVP;
};
struct tagObject {
std::string name;
FuzzyObject::Type type;
bool Physics;
FuzzyObject::Collider collider;
bool renderable;
FuzzyObject::FuzzyForm transform;
D3DXMATRIX FFMATRIX;
Personality::Behaviour CustomCode;
FuzzyObject::FMaterial materialDef;
FuzzyObject::FMesh mesh;
};
D3DXMATRIX FuzzyObject::UpdateTransform (FuzzyObject::FuzzyForm xform, FuzzyObject::Object camera) {
D3DXMATRIX pos, rot, scale;
D3DXMATRIX M, V, P;
D3DXMATRIX MVP;
D3DXMatrixTranslation(&pos, 0.0f, 0.0f, 0.0f);
D3DXMatrixRotationYawPitchRoll(&rot, D3DXToRadian(xform.rot.x), D3DXToRadian(xform.rot.y), D3DXToRadian(xform.rot.z));
D3DXMatrixScaling(&scale, xform.scale.x, xform.scale.y, xform.scale.z);
D3DXMatrixMultiply(&M, &scale, &rot);
D3DXMatrixMultiply(&M, &rot, &pos);
D3DXVECTOR3 from = D3DXVECTOR3(camera->transform.pos.x, camera->transform.pos.y, camera->transform.pos.z);
D3DXVECTOR3 to = D3DXVECTOR3(cos(camera->transform.rot.x*180/D3DX_PI), tan(camera->transform.rot.y*180/D3DX_PI), sin(camera->transform.rot.z*180/D3DX_PI));
D3DXVECTOR3 up = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
D3DXMatrixLookAtLH(&V, &from, &to, &up);
D3DXMatrixPerspectiveFovLH(&P, D3DXToRadian(60.0f), 640/480, 0.01, 1000);
MVP = M * V * P;
return MVP;
}
FuzzyObject::Object FuzzyObject::InitializeObj (std::string ObjName, FuzzyObject::ObjectType type, bool render, FuzzyObject::FuzzyForm xform) {
FuzzyObject::Object obj;
obj->transform = xform;
obj->name = ObjName;
obj->type = type;
obj->renderable = render;
return obj;
}
void FuzzyObject::UpdateObject(FuzzyObject::Object obj) {
obj->FFMATRIX = UpdateTransform(obj->transform, NULL);
}
Что происходит, я получаю эту ошибку в линкера:
Error: Undefined reference to 'FuzzyObject::InitializeObj()'
из FuzzyGame.cpp , где звонок выполняется следующим образом:
FuzzyObject::Object obj = FuzzyObject::InitializeObj(/*my parameters g here*/);
Любые идеи? Я не знаю, почему это это делает ... :(
Сообщение об ошибке в вашем названии полностью отличается от сообщения об ошибке, указанного в вашем телеобъекте. Просьба уточнить, какую ошибку вы получаете. –
О, стреляй! я случайно получил их неправильный путь ...: D – FuzzyQuills
'' не является допустимым именем класса. Представьте свой реальный пример. –