【问题标题】:SDL Window won't pop upSDL 窗口不会弹出
【发布时间】:2018-11-02 17:53:50
【问题描述】:

我的窗口不会弹出。

控制台出现,没有打开窗口只是说“应用程序结束”

这是我的代码:

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_image.h>
#include <windows.h>

using namespace std;

SDL_Window * okno;
SDL_Surface * ekran;
SDL_Event zdarzenie;

int frame = 0;

int main(int argc, char*args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    return 0;

    okno = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, NULL);

    ekran = SDL_GetWindowSurface(okno);

}

【问题讨论】:

  • return 0; 是你的错误。返回后程序结束,因为main() 结束。你当然不想在你打电话给SDL_CreateWindow 之前结束。您的编译器是否警告过无法访问的代码??
  • 投票结束,解决的方式不太可能帮助未来的提问者。

标签: c++ window sdl


【解决方案1】:

return 0; 是你的错误。返回后程序结束,因为main() 结束。返回后不执行 main 中的任何行。您当然不想在调用 SDL_CreateWindow 之前结束。

Can a function continue after a return statement?

把代码改成

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_image.h>
#include <windows.h>

using namespace std;

SDL_Window * okno;
SDL_Surface * ekran;
SDL_Event zdarzenie;

int frame = 0;

int main(int argc, char*args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);

    okno = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, NULL);

    ekran = SDL_GetWindowSurface(okno);

}

在c++返回0;可以从 main 中省略。

Can I omit return from main in C?

我还希望这段代码在许多编译器上发出警告(关于无法访问的代码)。如果它没有发出警告,您可能需要调高编译器的警告级别。如果它确实发出警告,您需要更加注意警告..

您可能还想删除全局变量,而是将您的变量设置为 main 的本地变量。全局变量通常被认为是一种不好的做法。

Are global variables bad?

SDL_Init() 也可能失败。您可能需要检查其返回值并在记录错误失败时退出。

if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
    SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
    return 1;
}

https://wiki.libsdl.org/SDL_Init

【讨论】:

  • 谢谢,我没有注意到 2 天后返回!我知道 return 是如何工作的,但我没有注意到它。无论如何,谢谢m8!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2022-11-03
  • 2016-05-11
  • 2010-10-10
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多