SDL 错误 LNK1120 & LNK2019

SDL error LNK1120 & 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;
}

以下是我收到的errors/warnings:

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

您正在从您的 main() 调用 Game::update(),但您似乎并没有真正实现它。

关于警告,请参阅this question了解更多信息。您可能正在尝试 link 使用使用不同 C 运行时构建的 SDL 版本(或其他一些库)。