Błąd LNK2019 przy przerabianiu kodu

0

Od kilku dni mam problem z naprawą LNK 2019. Wystąpił on podczas dzielenia kodu na klasy, i niestety nie wiem ja sobie z nim poradzić...

1>FApplication.obj : error LNK2019: unresolved external symbol "public: void __cdecl FCamera::Initialize(int,int,struct DirectX::__vector4,struct DirectX::__vector4,struct DirectX::__vector4)" (?Initialize@FCamera@@QEAAXHHU__vector4@DirectX@@00@Z) referenced in function "private: bool __cdecl FApplication::InitScene(void)" (?InitScene@FApplication@@AEAA_NXZ)
1>FApplication.obj : error LNK2019: unresolved external symbol "public: void __cdecl FCamera::UpdateCamera(struct DirectX::__vector4)" (?UpdateCamera@FCamera@@QEAAXU__vector4@DirectX@@@Z) referenced in function "private: void __cdecl FApplication::DetectInput(double)" (?DetectInput@FApplication@@AEAAXN@Z)
1>FApplication.obj : error LNK2019: unresolved external symbol "public: void __cdecl FCamera::SetParameters(float,float,struct DirectX::__vector4,struct DirectX::__vector4)" (?SetParameters@FCamera@@QEAAXMMU__vector4@DirectX@@0@Z) referenced in function "private: void __cdecl FApplication::DetectInput(double)" (?DetectInput@FApplication@@AEAAXN@Z)
1>FApplication.obj : error LNK2019: unresolved external symbol "public: struct DirectX::__vector4 __cdecl FCamera::GetPosition(void)" (?GetPosition@FCamera@@QEAA?AU__vector4@DirectX@@XZ) referenced in function "private: void __cdecl FApplication::UpdateScene(double)" (?UpdateScene@FApplication@@AEAAXN@Z)
1>FApplication.obj : error LNK2019: unresolved external symbol "public: struct DirectX::__vector4 __cdecl FCamera::GetRight(void)" (?GetRight@FCamera@@QEAA?AU__vector4@DirectX@@XZ) referenced in function "private: void __cdecl FApplication::DetectInput(double)" (?DetectInput@FApplication@@AEAAXN@Z)
1>FApplication.obj : error LNK2019: unresolved external symbol "public: struct DirectX::__vector4 __cdecl FCamera::GetForward(void)" (?GetForward@FCamera@@QEAA?AU__vector4@DirectX@@XZ) referenced in function "private: void __cdecl FApplication::DetectInput(double)" (?DetectInput@FApplication@@AEAAXN@Z)
1>C:\Users\batzi\source\repos\FEngine\x64\Debug\FEngine.exe : fatal error LNK1120: 6 unresolved externals

Kod klasy, wszystkie funkcje mam napisane w innym pliku

#pragma once

#include <DirectXMath.h>

using namespace DirectX;

class FCamera
{
public:
	FCamera();
	~FCamera();

	void Initialize(int, int, XMVECTOR, XMVECTOR, XMVECTOR);
	void UpdateCamera(XMVECTOR);

	void SetParameters(float, float, XMVECTOR, XMVECTOR);

	XMVECTOR GetPosition();
	XMVECTOR GetRight();
	XMVECTOR GetForward();

	const XMMATRIX GetView();
	const XMMATRIX GetProjection();

	float GetYaw();
	float GetPitch();
private:
	const float mCharCamDist = 15.0f; //Distance between character and camera.

	float mYaw;
	float mPitch;

	//Matrices.
	XMMATRIX mView;
	XMMATRIX mProjection;
	XMMATRIX mRotationMatrix;

	//Vectors.
	XMVECTOR mPosition;
	XMVECTOR mTarget;
	XMVECTOR mUp;
	XMVECTOR mForward;
	XMVECTOR mRight;

	XMVECTOR mDefaultForward;
	XMVECTOR mDefaultRight;
};
0

Nie wiem, czy możliwe będzie dla nas znalezienie błędu mając tylko deklarację jednej z wielu klas.
Na przykład ten błąd:

1>FApplication.obj : error LNK2019: unresolved external symbol "public: void __cdecl FCamera::Initialize(int,int,struct DirectX::__vector4,struct DirectX::__vector4,struct DirectX::__vector4)" (?Initialize@FCamera@@QEAAXHHU__vector4@DirectX@@00@Z) referenced in function "private: bool __cdecl FApplication::InitScene(void)" (?InitScene@FApplication@@AEAA_NXZ)

Jasno mówi, że gdzieś w (nieznanej nam) klasie FApplication próbujesz wywołać metodę z klasy FCamera, ale brakuje jej definicji...

Musisz wrzucić więcej i sam dokładnie pochylić się nad komunikatami linkera, tak aby krok po kroku sprawdzać czego mu brakuje i z jakiego powodu.

0

To jest definicja klasy FCamera

#include "FCamera.h"

FCamera::FCamera()
{
	mYaw = 0.0f;
	mPitch = 0.0f;

	mDefaultForward = XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f);
	mDefaultRight = XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f);

	mForward = XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f);
	mRight = XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f);
}


FCamera::~FCamera()
{
}

void FCamera::Initialize(int width, int height, XMVECTOR camPosition, XMVECTOR camTarget, XMVECTOR camUp)
{
	mView = XMMatrixLookAtLH(mPosition, mTarget, mUp);
	mProjection = XMMatrixPerspectiveFovLH(3.14f / 4.0f, (float)width / height, 1.0f, 200.0f);
}

void FCamera::UpdateCamera(XMVECTOR charPosition)
{
	// Set the camera target at character.
	mTarget = charPosition;

	mTarget = XMVectorSetY(mTarget, XMVectorGetY(mTarget) + 5.0f);

	// Rotate camera around target
	mRotationMatrix = XMMatrixRotationRollPitchYaw(-mPitch, mYaw, 0);
	mPosition = XMVector3TransformNormal(mDefaultForward, mRotationMatrix);
	mPosition = XMVector3Normalize(mPosition);

	// Set our cameras position to rotate around the character.
	mPosition = (mPosition * mCharCamDist) + mTarget;

	mForward = XMVector3Normalize(mTarget - mPosition);
	mForward = XMVectorSetY(mForward, 0.0f);	

	mForward = XMVector3Normalize(mForward);

	mRight = XMVectorSet(-XMVectorGetZ(mForward), 0.0f, XMVectorGetX(mForward), 0.0f);

	mUp = XMVector3Normalize(XMVector3Cross(XMVector3Normalize(mPosition - mTarget), mRight));

	mView = XMMatrixLookAtLH(mPosition, mTarget, mUp);
}

void FCamera::SetParameters(float camYaw, float camPitch, XMVECTOR camRight, XMVECTOR camForward)
{
	mYaw = camYaw;
	mPitch = camPitch;
	mRight = camRight;
	mForward = camForward;
}

XMVECTOR FCamera::GetPosition()
{
	return mPosition;
}

XMVECTOR FCamera::GetRight()
{
	return mRight;
}

XMVECTOR FCamera::GetForward()
{
	return mForward;
}

const XMMATRIX FCamera::GetView()
{
	return mView;
}

const XMMATRIX FCamera::GetProjection()
{
	return mProjection;
}

float FCamera::GetYaw()
{
	return mYaw;
}

float FCamera::GetPitch()
{
	return mPitch;
}

teraz niestety nie mam możliwość dodania FApplication zrobię to jak wrócę do domu.

0

Tak trochę strzelam, ale wygląda na to, że po prostu nie masz pliku FCamera.cpp dołączonego do projektu/solucji. Dlatego nie znajduje funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1