传递指针到函数c++ SDL2
Passing Pointer To Function C++ SDL2
我最近一直在把一个大的源文件分成头文件和小的源文件。我以前从来没有这样做过,很大程度上是因为作用域,我不得不重写一些函数来接受指针,然后从main()调用它们。
这仍然是一个正在进行的工作,然而,我遇到了一个问题,我已经尝试了几个小时来解决。该代码来自Lazy Foos优秀的SDL教程系列。
我已经把这个函数移到了头文件中。巧妙地命名为misc.cpp/misc.h.
bool init(SDL_Window *gWindow, SDL_Renderer *gRenderer)
{
//Initialization flag
bool success = true;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL Error: %sn", SDL_GetError() );
success = false;
}
else
{
//Set texture filtering to linear
if( !SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" ) )
{
printf( "Warning: Linear texture filtering not enabled!" );
}
//Create window
gWindow = SDL_CreateWindow( "Roulette Testing", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if( gWindow == NULL )
{
printf( "Window could not be created! SDL Error: %sn", SDL_GetError() );
success = false;
}
else
{
//Create renderer for window
gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if( gRenderer == NULL )
{
printf( "Renderer could not be created! SDL Error: %sn", SDL_GetError() );
success = false;
}
else
{
//Initialize renderer color
SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
//Initialize PNG loading
int imgFlags = IMG_INIT_PNG;
if( !( IMG_Init( imgFlags ) & imgFlags ) )
{
printf( "SDL_image could not initialize! SDL_image Error: %sn", IMG_GetError() );
success = false;
}
std::cout << gRenderer << "renderer not NULL" << std::endl; //This is where I am checking the value of gRenderer within the function.
}
}
}
std::cout << "initialization success" << std::endl;
return success;
}
现在我试图在包含头文件并将cpp编译为目标代码后从我的main()调用此函数。这对纹理头文件很有效。
不幸的是,现在当我传递一个SDL_Renderer指针到这个init函数,它成为本地,我留下一个NULL指针,当我返回。我试过了接线员的地址,但是不接受!
init(gWindow, gRenderer);
我不知道为什么,但我猜这与类型有关。
有什么想法吗??
回应评论…在我的主菜单中,我发射了一个
cout << gRenderer << endl;
,在函数调用前后都返回NULL。
我在触发另一个计数的函数中突出显示了
使函数签名是一个指针的引用,它将返回从SDL_CreateRenderer
返回给调用函数的值(假设gRenderer
传入时是一个指针):
bool init(SDL_Window *gWindow, SDL_Renderer *&gRenderer)
看起来你也应该以同样的方式通过gWindow
相关文章:
- 如何创建事件驱动的 SDL2 应用程序
- 使用 SDL2 和SDL_image C++加载图像
- 将 SDL2 与 CMake 链接起来
- SDL2 透明背景
- 如何在使用 SDL2 的 Eclipse 中构建 c++ 程序
- 不带轮询的 SDL2 事件回调
- C++ SDL2:如何将矩形渲染到多个视口中
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- SDL2 二维纹理分配/池化
- 如何使用 sdl2 快速绘制像素网格?
- 看不到文件'SDL2.lib'
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- SDL2 无法正确绘制矩形
- 实施英特尔实感和 SDL2 时出现问题
- 找不到 sdl2.dll
- SDL2 程序只写入部分字符串
- 为什么在使用 SDL2 时仍然收到'undefined reference'链接器错误?
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- SDL2 (C++) 如何使图像变小
- SDL2 不是基于 VS 代码构建的