Компилятор не возвращает отсутствующий SDL.h, но SDL_DisplayFormat не объявляется в области действия функции-члена класса, расположенной в другом заголовке, даже если он инициализирован в main.
SDL_Surface *SpriteLoad::Load(char *File)
{
SDL_Surface *temp = NULL;
SDL_Surface *opt = NULL;
if ((temp = IMG_Load(File)) == NULL)
{
return NULL;
}
opt = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
return opt;
}
Где мои основные элементы SDL через класс и функцию-член:
int main (int args, char *argc[])
{
bool quit = false;
OnRun Game; // Class that init's SDL
Window TestWin;
GlobalTimer fps;
TestWin.Debug();
Я могу создать окно, используя SDL_Window, используя этот класс, а также использовать SDL_GetTick.
РЕДАКТИРОВАТЬ: заголовки, используемые для Sprite :: Load в настоящее время SDL, SDL_image, SDL_ttf и SDL_mixer извлечены и построены из ртутного репо. Я не думаю, что это ошибка связи, хотя
Причина, по которой вы получаете эту ошибку компилятора, заключается в том, что SDL_DisplayFormat
больше не существует в SDL-2.0.
Посмотрев на SDL Wiki Doc кажется SDL_DisplayFormat
из SDL-1.2 был заменен SDL_ConvertSurfaceFormat
в SDL-2.0.
Я бы переписал ваш код следующим образом для SDL 2.0;
SDL_Surface *SpriteLoad::Load(SDL_Window *window, char *File)
{
SDL_Surface *temp = NULL;
SDL_Surface *opt = NULL;
if ((temp = IMG_Load(File)) == NULL)
{
return NULL;
}
// If the window wasn't created yet, just return the texture
if(window == NULL) return temp;
opt = SDL_ConvertSurfaceFormat(temp, SDL_GetWindowPixelFormat(window), 0);
SDL_FreeSurface(temp);
return opt;
}
В моем собственном коде я возвращаю изображение неоптимизированным, если окно еще не создано (иногда я использую его для заставки перед окном). Но вы можете изменить это так, чтобы он освобождает temp и возвращает NULL, если это важно для вас, возможно, с предупреждением о создании окна в первую очередь.