2015-01-21 7 views
1

Я пытаюсь составить простой пример SDL из книги, и я получаю эти ошибки. Я почти уверен, что все правильно связано, потому что я смог получить другие примеры SDL для компиляции. Я использую Visual Studio 2013.Ошибка SDL LNK1120 & LNK2019

Этот код предназначен для использования с SDL 2.0 и ссылки на SDL.lib, в то время как я использую SDL 2.0.3 и ссылку на SDL2.lib. Тем не менее, я не вижу причин, почему это влияет на что-либо здесь.

Game.cpp

#include "Game.h" 
#include <iostream> 

Game::Game() 
{ 

} 

bool Game::init(const char* title, int xpos, int ypos, int width, 
    int height, int flags) 
{ 
    // attempt to initialize SDL 
    if (SDL_Init(SDL_INIT_EVERYTHING) == 0) 
    { 
     std::cout << "SDL init success\n"; 
     // init the window 
     m_pWindow = SDL_CreateWindow(title, xpos, ypos, 
      width, height, flags); 
     if (m_pWindow != 0) // window init success 
     { 
      std::cout << "window creation success\n"; 
      m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0); 
      if (m_pRenderer != 0) // renderer init success 
      { 
       std::cout << "renderer creation success\n"; 
       SDL_SetRenderDrawColor(m_pRenderer, 
        255, 255, 255, 255); 
      } 
      else 
      { 
       std::cout << "renderer init fail\n"; 
       return false; // renderer init fail 
      } 
     } 
     else 
     { 
      std::cout << "window init fail\n"; 
      return false; // window init fail 
     } 
    } 
    else 
    { 
     std::cout << "SDL init fail\n"; 
     return false; // SDL init fail 
    } 
    std::cout << "init success\n"; 
    m_bRunning = true; // everything inited successfully,start the main loop 
    return true; 
} 

void Game::render() 
{ 
    SDL_RenderClear(m_pRenderer); // clear the renderer to the draw color 
    SDL_RenderPresent(m_pRenderer); // draw to the screen 
} 

void Game::handleEvents() 
{ 
    SDL_Event event; 
    if (SDL_PollEvent(&event)) 
    { 
     switch (event.type) 
     { 
     case SDL_QUIT: 
      m_bRunning = false; 
      break; 
     default: 
      break; 
     } 
    } 
} 

void Game::clean() 
{ 
    std::cout << "cleaning game\n"; 
    SDL_DestroyWindow(m_pWindow); 
    SDL_DestroyRenderer(m_pRenderer); 
    SDL_Quit(); 
} 

Game.h

#ifndef __Game__ 
    #define __Game__ 
    #include "SDL.h" 
    class Game 
    { 
    public: 
     Game(); 
     ~Game(); 
     bool init(const char* title, int xpos, int ypos, int width, int 
      height, int flags); 
     void render(); 
     void update(); 
     void handleEvents(); 
     void clean(); 
     bool running() { return m_bRunning; } 
    private: 
     SDL_Window* m_pWindow; 
     SDL_Renderer* m_pRenderer; 
     bool m_bRunning; 
    }; 
    #endif /* defined(__Game__) */ 

main.cpp

#include "Game.h" 
// our Game object 
Game* g_game = 0; 
int main(int argc, char* argv[]) 
{ 
    g_game = new Game(); 
    g_game->init("Chapter 1", 100, 100, 640, 480, 0); 
    while (g_game->running()) 
    { 
     g_game->handleEvents(); 
     g_game->update(); 
     g_game->render(); 
    } 
    g_game->clean(); 
    return 0; 
} 

И являются следующие ошибки/предупреждения я получаю:

Error 3 error LNK1120: 1 unresolved externals c:\users\alexn\documents\visual studio 2013\Projects\SDL_template2\Debug\SDL_template2.exe SDL_template2 

Error 2 error LNK2019: unresolved external symbol "public: void __thiscall Game::update(void)" ([email protected]@@QAEXXZ) referenced in function _SDL_main c:\Users\alexn\documents\visual studio 2013\Projects\SDL_template2\SDL_template2\Main.obj SDL_template2 

Warning 1 warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library c:\Users\alexn\documents\visual studio 2013\Projects\SDL_template2\SDL_template2\MSVCRTD.lib(cinitexe.obj) SDL_template2 
+1

Ошибка 2 достаточно проста, нет определения 'Game :: update()'. – user657267

ответ

1

Вы вызываете Game :: update() из своего основного(), однако кажется, что вы на самом деле не реализовали его.

Что касается предупреждения, см. this question для получения дополнительной информации. Вероятно, вы пытаетесь установить связь с версией SDL (или некоторой другой lib), которая была построена с другой версией C.

+0

Оказывается, добавление пустого метода обновления - все, что нужно для работы, спасибо. – aredscout