C++ 错误:渲染器已与窗口关联

C++ 错误:渲染器已与窗口关联,c++,sdl-2,C++,Sdl 2,我正在尝试设置SDL项目,但收到以下错误消息: Renderer already associated with window 从以下功能: void Game::render() { renderer = SDL_CreateRenderer(window, -1, 0); if (renderer == NULL) std::cout << "Failed to create a renderer&quo

我正在尝试设置SDL项目,但收到以下错误消息:

Renderer already associated with window
从以下功能:

void Game::render()
    {
        renderer = SDL_CreateRenderer(window, -1, 0);
        if (renderer == NULL)
            std::cout << "Failed to create a renderer" << '\n' << "Error: " << SDL_GetError() << std::endl;
    }
game.cpp:

    #include "game.h"
    
    bool Game::init()
    {
        if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
            return true;
        else
            std::cout << "Could not initialise SDL" << '\n' << "Error: " << SDL_GetError() << std::endl;
    }
    
    bool Game::constructWindow(const char* windowName, uint16_t xWindowPos, uint16_t yWindowPos
        , uint16_t windowWidth, uint16_t windowHeight, bool fullScreen)
    {
        window = SDL_CreateWindow(windowName, xWindowPos, yWindowPos, windowWidth, windowHeight, fullScreen);
        if (!window)
            std::cout << "Could not create window" << '\n' << "Error: " << SDL_GetError() << std::endl;
    
        return window;
    }
    
    void Game::render()
    {
        renderer = SDL_CreateRenderer(window, -1, 0);
        if (!renderer)
            std::cout << "Failed to create a renderer" << '\n' << "Error: " << SDL_GetError() << std::endl;
    }
    
    void Game::update()
    {
        SDL_RenderPresent(renderer);
    }
    
    SDL_Window* Game::getWindow()
    {
        return window;
    }
    
    bool Game::handleEvents()
    {
        while (SDL_PollEvent(&event))
            if (event.type == SDL_QUIT)
                quit = true;
        return quit;
    }

while
循环中调用
app.render()
(创建渲染器,尽管名称有误导性)绝对不是“一次创建渲染器”。您可能应该在
constructWindow
中创建渲染器,然后在
render
中进行实际渲染。哦,对不起,我没有注意到这一点。它现在可以工作了,thanksI按照您的建议做了,将函数的名称更改为
ConstructionWindowandRender
,并只留下
render
函数来实际绘制内容。
    #include "game.h"
    
    bool Game::init()
    {
        if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
            return true;
        else
            std::cout << "Could not initialise SDL" << '\n' << "Error: " << SDL_GetError() << std::endl;
    }
    
    bool Game::constructWindow(const char* windowName, uint16_t xWindowPos, uint16_t yWindowPos
        , uint16_t windowWidth, uint16_t windowHeight, bool fullScreen)
    {
        window = SDL_CreateWindow(windowName, xWindowPos, yWindowPos, windowWidth, windowHeight, fullScreen);
        if (!window)
            std::cout << "Could not create window" << '\n' << "Error: " << SDL_GetError() << std::endl;
    
        return window;
    }
    
    void Game::render()
    {
        renderer = SDL_CreateRenderer(window, -1, 0);
        if (!renderer)
            std::cout << "Failed to create a renderer" << '\n' << "Error: " << SDL_GetError() << std::endl;
    }
    
    void Game::update()
    {
        SDL_RenderPresent(renderer);
    }
    
    SDL_Window* Game::getWindow()
    {
        return window;
    }
    
    bool Game::handleEvents()
    {
        while (SDL_PollEvent(&event))
            if (event.type == SDL_QUIT)
                quit = true;
        return quit;
    }
#include "game.h"

int main(int argc, char* argv[])
{
    Game app;
    if (app.init())
        if (app.constructWindow("3D Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1200, 600))
            while (!app.handleEvents())
            {
                app.render();
                app.update();
            }

    SDL_DestroyWindow(app.getWindow());
    SDL_Quit();

    return EXIT_SUCCESS;

}