Recommendations on building short tile engine as static lib

So I decided to make a little tile engine based on SDL to practice some OOP and library building and linking.

Below is the header and source file, I know the Window class has no sense being instantiable, but I get linker errors if using static members.

I know it’s not real tile engine but just some automation functions, but it’s for testing purposes.

Any recommendations or did I made some fatal design errors?

Code:

// Header

#include “SDL.h”
#include “SDL_image.h”
#include “SDL_mixer.h”

namespace KTE
{

class Window // for window, it’s renderer, menu display and audio
{

public:

SDL_Window *window;
SDL_Renderer *render;
Mix_Music *bgr_music;
Mix_Chunk *sfx;

void Create(const char* window_name, int width, int height);
void Destroy();
void Menu(const char* menu_bgr_path, const char* menu_bgr_music);
void PlayMusic(const char* music_path);
void PlaySound(const char* sound_path);
void Pause(int msec);

protected:

SDL_Surface *menu_bgr;
SDL_Texture *texture_menu_bgr;

};

class Tile : public Window // tile surfaces, textures, rects and code(describing the type of each tile)
{

public:

SDL_Texture *texture;
SDL_Surface *surface;
SDL_Rect rect;

int code;

Tile();
~Tile();

void CreateTile(const char* path, int c, int x_coor, int y_coor);

};

}

Code:

#include “KTE.h”

namespace KTE
{

Tile::Tile()
{
texture = NULL;
surface = NULL;
code = 0;
rect.h = 0;
rect.w = 0;
rect.x = 0;
rect.y = 0;
}

Tile::~Tile()
{
SDL_FreeSurface(surface);
SDL_DestroyTexture(texture);
}

void Tile::CreateTile(const char *path, int c, int x_coor, int y_coor)
{
surface = IMG_Load(path);
code = c;
rect.h = surface->h;
rect.w = surface->w;
rect.x = x_coor;
rect.y = y_coor;
}

void Window::Create(const char* window_name, int width, int height)
{
SDL_Init(SDL_INIT_EVERYTHING | SDL_INIT_NOPARACHUTE);
IMG_Init;
TTF_Init();
Mix_Init;
window = SDL_CreateWindow(window_name, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_SHOWN);
render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 1024);
}

void Window::Destroy()
{
SDL_RenderClear(render);
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
Mix_Quit();
TTF_Quit();
IMG_Quit();
SDL_Quit();
exit(0);
}

void Window::Menu(const char* menu_bgr_path, const char* menu_bgr_music)
{
PlayMusic(menu_bgr_music);
menu_bgr = IMG_Load(menu_bgr_path);
texture_menu_bgr = SDL_CreateTextureFromSurface(render, menu_bgr);
SDL_RenderClear(render);
SDL_RenderCopy(render, texture_menu_bgr, NULL, NULL);
SDL_RenderPresent(render);
}

void Window::PlayMusic(const char* music_path)
{
bgr_music = Mix_LoadMUS(music_path);
Mix_PlayMusic(bgr_music, -1);
}

void Window::PlaySound(const char* sound_path)
{
sfx = Mix_LoadWAV(sound_path);
Mix_PlayChannel(-1, sfx, 0);
}

void Window::Pause(int msec)
{
SDL_Delay(msec);
}

}