c++ - SDL_Init(SDL_INIT_VIDEO) 返回 1
问题描述
只是想知道,有人遇到过这个问题:
我正在使用 Visual Studio Community,在添加类并将SDL_Init(SDL_INIT_VIDEO) 从主函数移动到 Someclass.cpp 之后,我的窗口不再出现。SDL_Init 返回 1。
我认为这只是我的代码相关问题,但我复制了导师代码,但在我的环境中效果不佳。(他的 eclipse 正常工作)当从 main.cpp 调用 SDL_Init(SDL_INIT_VIDEO) 时,它曾经正常工作。我试图在项目/设置/链接器/输入/附加依赖项中添加其他依赖项,但没有成功:(也许我做错了什么。SDL 窗口仍然没有出现。
这是初始化 SDL 视频的函数:
SDL_Window* Screen::Init(uint32_t w, uint32_t h, uint32_t mag){
if (SDL_Init(SDL_INIT_VIDEO))
{
std::cout << "Error SDL_Init Failed" << SDL_GetError() << std::endl;
return nullptr;
}
mWidth = w;
mHeight = h;
moptrWindow = SDL_CreateWindow("Arcade", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, mWidth * mag, mHeight * mag, 0);
if (moptrWindow)
{
mnoptrWindowSurface = SDL_GetWindowSurface(moptrWindow);
SDL_PixelFormat* pixelFormat = mnoptrWindowSurface->format;
Color::InitColorFormat(pixelFormat);
mClearColor = Color::Black();
mBackBuffer.Init(pixelFormat->format, mWidth, mHeight);
mBackBuffer.Clear(mClearColor);
}
return moptrWindow;
}
调用 Init 的主要函数:
int main(int argc, const char* argv[]){
Screen theScreen;
theScreen.Init(SCREEN_WIDTH, SCREEN_HEIGHT, MAGNIFICATION);
theScreen.Draw(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, Color::Yellow());
theScreen.SwapScreens();
SDL_Event sdlEvent;
bool running = true;
while (running)
{
while (SDL_PollEvent(&sdlEvent))
{
switch (sdlEvent.type)
{
case SDL_QUIT:
running = false;
break;
}
}
}
return 0;
}
输出是:
1
C:\Users\MyPC\projects\drawing-line\Debug\drawing-line.exe(进程 13032)以代码 0 退出。按任意键关闭此窗口。. .
如果有人想尝试我的代码,可以链接到 google drive: 这就是整个项目
谢谢你。卢克
解决方案
最终我解决了这个问题。我将所有设置更改为 X64 并删除了const in: int main(int argc,const char* argv[])。现在可以正常工作了。花了我一段时间:)
推荐阅读
- google-api - 在父母中指定“AFolder”后如何递归读取子文件夹?
- javascript - 如何保护客户端的Javascript更改
- vagrant - 从 vagrant 中删除默认串口
- python - django 中的 newsletter.send.php
- r - 如何将函数应用于 tidyverse 中的 colnames
- java - 如何在java程序中设置JVM参数值
- java - 使用数组的文本到图像
- vue-component - 将放大/缩小移动到左上角以外的其他位置
- java - 如何以编程方式在 Java 中获取 Kafka 集群和代理信息?
- javascript - 数据库事务并行发生而不是循环顺序发生