Я строю проект в SDL2. Я пытаюсь создать государственную систему. Это работает путем создания пустого исходного файла с методами Init, Update и Render, затем создания объекта State и передачи указателей на методы в качестве аргументов. Однако всякий раз, когда я пытаюсь вызвать какую-либо функцию, в любом месте, это дает мне ошибку в заголовке (это происходит во время выполнения, а не во время компиляции). Самая странная часть, это дает мне ошибку на линии после вызова.
Состояние. cpp:
State::State(){ }
State::State(void(*Init)(), void(*Update)(), void(*Render)(), int stateId)
:Init(Init), Update(Update), Render(Render), initRan(false)
{
states[stateId] = *this;
}
void State::CallStateMethod(int method)
{
if (method == UPDATE)
Update();
else if (method == RENDER)
Render();
else if (method == INIT)
Init();
}
void State::ChangeState(int stateId)
{
currentState = stateId;
}
State.h:
#include<iostream>
enum MethodTypes{INIT, UPDATE, RENDER};
class State
{
public:
//Constructor takes function pointers for an Init, Update and render furction, as well as a state id int.
State(void(*Init)(), void(*Update)(), void(*Render)(), int stateId);
//Default constructor, only to be used for placeholders
State();
//places to hold function pointers
void(*Init)();
void(*Update)();
void(*Render)();
void CallStateMethod(int method);
//method to change the state.
static void ChangeState(int stateId);
//Bool to check if init method has already ran
bool initRan;
};
static State states[1];
static int currentState;
И, исходный файл теста.
void Init()
{
std::cout << "It worked!" << std::endl;
}
void Update()
{
}
void Render()
{
}
State newState(&Init, &Update, &Render, 0);
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.