Нужна помощь в устранении ошибки компоновщика в построении движка / фреймворка C ++

0

Я приехал сюда в крайнем случае, так как мне нужна помощь в этом вопросе для назначения на завтра.

Я собираю простой движок в 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

Обычно я помещал ошибки компоновщика в циклические, но я записал диаграмму последовательности сортировки, и ничто не включает в себя все, что включает в себя. Вероятно, это что-то очевидное. Я просто очень стеснен. Любая помощь приветствуется.

Теги:
linker-errors

1 ответ

1

Компонент не может найти функцию. Вам необходимо реализовать функцию GetGameStateManager()

  • 0
    Ах да, конечно. Однако теперь я запутался, мне нужно вернуть указатель EGameStateManager, и я не уверен, какой из них мне нужен, чтобы функция работала правильно.
  • 0
    Похоже, вы пытаетесь сделать что-то похожее на одиночный EGameStateManager* EApplication::GetGameStateManager(){ static EGameStateManager* gsm = new EGameStateManager(); return gsm; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню