Возникла исключительная ситуация в 0x000000000: 0x0000005: место выполнения нарушения прав доступа - PullRequest
0 голосов
/ 21 апреля 2020

Я строю проект в 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);

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

...