SDL错误LNK1120& LNK2019

时间:2015-01-21 04:09:20

标签: c++ visual-studio linker-errors sdl-2 lnk2019

我正在尝试从书中编译一个简单的SDL示例,我遇到了这些错误。我接近正面,一切都正确链接,因为我能够得到其他SDL示例编译正常。我正在使用Visual Studio 2013。

此代码旨在与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)" (?update@Game@@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 个答案:

答案 0 :(得分:1)

你从main()调用Game :: update(),但是你似乎没有实际实现它。

有关警告,请参阅this question以获取更多信息。您可能正在尝试链接使用不同C运行时构建的SDL版本(或其他一些lib)。