Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL窗口在启动时关闭并返回0_C++_Return_Sdl_Exit - Fatal编程技术网

C++ SDL窗口在启动时关闭并返回0

C++ SDL窗口在启动时关闭并返回0,c++,return,sdl,exit,C++,Return,Sdl,Exit,我一启动程序窗口就会关闭。这是主要功能: int main(int argc, char* argv[]) { if (!init()) { printf("Could not initialize!"); } else { bool quit = false; SDL_Event ev; while(!quit) { while(SDL_PollEv

我一启动程序窗口就会关闭。这是主要功能:

int main(int argc, char* argv[])
{
    if (!init())
    {
        printf("Could not initialize!");
    }
    else
    {
        bool quit = false;
        SDL_Event ev;

        while(!quit)
        {
            while(SDL_PollEvent(&ev))
            {
                if(ev.type = SDL_QUIT)
                {
                    quit = true;
                }
            }
        }
    }
    close();
    return 0;
}
添加printf()语句将其缩小到本节

while(SDL_PollEvent(&ev))
{
    if(ev.type = SDL_QUIT)
    {
        quit = true;
    }
}
如果我将
while(SDL\u PollEvent(&ev))
更改为
while(!SDL\u PollEvent(&ev))
while(SDL\u PollEvent(&ev)!=0)
窗口保持打开状态,但当我将鼠标移到它上面或试图移动它时,它就会关闭

表示如果存在挂起的事件,
SDL\u PollEvent
仅返回1(true),并且由于程序返回0,因此似乎
SDL\u PollEvent
必须以某种方式返回1,并且
ev.type
未单击X按钮就设置为
SDL\u QUIT
,我认为这不太可能。所以我可能做错了什么,但我不知道是什么,我一直在努力寻找解决办法

另外,这里是init()函数

bool init()
{
    bool success = true;
    if( SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("SDL failed to initialize! SDL Error: %s\n", SDL_GetError());
        success = false;
    }
    else
    {
        window = SDL_CreateWindow("Image Encrypter", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                                  SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        if(window == NULL)
        {
            printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
            success = false;
        }
        else
        {
            screenSurface = SDL_GetWindowSurface(window);
            if(screenSurface == NULL)
            {
                printf("Screen surface could not be created! SDL Error: %s\n", SDL_GetError());
            }
        }
    }
    return success;
}
bool init()
{
布尔成功=真;
if(SDL_Init(SDL_Init_视频)<0)
{
printf(“SDL未能初始化!SDL错误:%s\n”,SDL_GetError());
成功=错误;
}
其他的
{
window=SDL\u CreateWindow(“图像加密器”,SDL\u WINDOWPOS\u未定义,SDL\u WINDOWPOS\u未定义,
屏幕宽度、屏幕高度、显示的SDL窗口);
如果(窗口==NULL)
{
printf(“无法创建窗口!SDL错误:%s\n”,SDL_GetError());
成功=错误;
}
其他的
{
屏幕表面=SDL_GetWindowSurface(窗口);
如果(屏幕表面==NULL)
{
printf(“无法创建屏幕表面!SDL错误:%s\n”,SDL_GetError());
}
}
}
回归成功;
}
控制台在init()函数中不输出任何printf语句,因此我认为这不是问题所在。

这里有一个常见错误:

if(ev.type = SDL_QUIT)
-这是作业,不是比较。您的代码的第一个版本应该可以工作