Я приехал сюда в крайнем случае, так как мне нужна помощь в этом вопросе для назначения на завтра.
Я собираю простой движок в C++, который обрабатывает узлы, загрузку текстур/активов и государственную систему. Я хотел бы попробовать перейти к кодированию материалов, связанных с активами, но для этого мне нужна государственная система для работы.
APPLICATION.h
#pragma once
#include "AppGSM\EGameStateManager.h"
class EGameStateManager;
class EApplication
{
public:
static void Init();
static void RunApp();
EGameStateManager* GetGameStateManager();
protected:
static int windowWidth;
static int windowHeight;
static bool fullScreen;
static bool frameSync;
static char* windowTitle;
};
В настоящее время, когда я пытаюсь использовать указатель, указанный выше, как в моем классе teststate, так и в моем main.cpp, менеджеру состояния игры я получаю ошибки компоновщика. (см. ниже)
TEST STATE.cpp
#include "AppGSM\ETestState.h"
#include "AppGSM\EApplication.h"
#include <iostream>
ETestState::ETestState(EApplication* pApp){}
ETestState::~ETestState(){}
void ETestState::Update(float deltaTime)
{
//if(INPUT::GetKey(KEY_T))
//{
// cout << "Entered Test State" << endl;
//}
m_testTimer += deltaTime;
if(m_testTimer > 3.0f)
{
m_pApp->GetGameStateManager()->ChangeState("Second TEST");
}
}
void ETestState::Draw(){}
main.cpp
#include "GL\glew.h"
#include "GL\glfw.h"
#include <conio.h>
#include "AppGSM\EApplication.h"
#include "AppGSM\ETestState.h"
void main()
{
EApplication::Init();
EApplication* pApp = new EApplication();
pApp->GetGameStateManager()->SetState("TEST", new ETestState(pApp));
EApplication::RunApp();
}
и это базовый класс состояния игры, который содержит указатель приложения, используемый в teststate:
BASEGAMESTATE.h
#pragma once
class EApplication;
class EGameStateManager;
class EBaseGameState
{
public:
EBaseGameState(){}
EBaseGameState(EApplication* pApp);
//always make the destructor virtual !!
virtual ~EBaseGameState();
//all game states must define update and draw
virtual void Update(float deltaTime) = 0;
virtual void Draw() = 0;
protected:
EApplication* m_pApp;
};
это ошибки компоновщика:
Error 9 error LNK2019: unresolved external symbol "public: class EGameStateManager * __thiscall EApplication::GetGameStateManager(void)" (?GetGameStateManager@EApplication@@QAEPAVEGameStateManager@@XZ) referenced in function _main D:\Engine\main.obj
Error 10 error LNK2001: unresolved external symbol "public: class EGameStateManager * __thiscall EApplication::GetGameStateManager(void)" (?GetGameStateManager@EApplication@@QAEPAVEGameStateManager@@XZ) D:\Engine\ETestState.obj
Обычно я помещал ошибки компоновщика в циклические, но я записал диаграмму последовательности сортировки, и ничто не включает в себя все, что включает в себя. Вероятно, это что-то очевидное. Я просто очень стеснен. Любая помощь приветствуется.
Компонент не может найти функцию. Вам необходимо реализовать функцию GetGameStateManager()
EGameStateManager* EApplication::GetGameStateManager(){ static EGameStateManager* gsm = new EGameStateManager(); return gsm; }