Я не уверен, что термин для того, что делает SDL2, но я читал, что это "угоняет" основной.
У меня есть проект под названием CoolGame
и проект, который я хочу использовать во многих других играх, которые я делаю, под названием Engine
.
Вот мой engine.cpp
#include "engine.h"
using namespace engine;
Engine::Engine()
{
window = NULL;
renderer = NULL;
}
Engine::Engine(const char* title)
{
SDL_Init(SDL_INIT_EVERYTHING);
window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 400, SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window, -1, 0);
}
void Engine::RenderThisFrame()
{
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
Некоторые из вас могут видеть, куда я иду. Я пытаюсь сделать хорошую обёртку Game Engine для sdl2. Вот мой главный в coolgame
#include "engine.h"
#include <iostream>
#undef main
using namespace std;
using namespace engine;
int main(int argc, const char* argv[]) {
cout << "break main." << endl;
Engine e = Engine("title");
e.RenderThisFrame();
return 0;
}
Это не работает. Я также пробовал #undef
в engine.h
, и я получаю ту же ошибку, что и ниже.
LNK2019 unresolved external symbol _SDL_main referenced in function _main_utf8
Когда я беру SDL.h
и помещаю его прямо в coolgame
, он работает как положено.
Можно ли как-нибудь остановить SDL2
от угона основного? Или есть какой-нибудь способ поднять этот главный угонщик на проект coolgame
? Если это имеет смысл
Для экономии здесь
engine.h
#ifndef ENGINE_CODE
#define ENGINE_CODE
#include "SDL.h"
#undef main
namespace engine {
class Engine {
public:
Engine();
Engine(const char* title);
void RenderThisFrame();
private:
SDL_Window* window;
SDL_Renderer* renderer;
};
}
#endif
Редактировать
Я использую Visual Studio 2019 для своей IDE, если это имеет значение, я могу предоставить версию инструментов сборки C ++ по запросу.
Редактировать
Я не верю, что на этот вопрос точно отвечает другой вопрос. И вот почему.
Я добавил SDL_MAIN_HANDLED
и удалил #undefine main
, и он все еще не работал.
Затем я переместил весь свой код двигателя в проект coolgame
с SDL_MAIN_HANDLED
и основной работой, как ожидалось. И вот, это работает, это как-то связано с ссылками на проекты. Так что это не исправляет мой первоначальный вопрос. Я добавляю тег Visual Studio.
Я добавил папку engine в каталоги include в coolgame
, а также добавил packages/.../sdl
в каталоги include