我最近将大型源文件分解为头文件和较小的源文件。我从来没有这样做过,主要是因为范围,我不得不重写一些函数来接受指针,然后从main()中调用它们。将指针传递给函数C++ SDL2
这仍然是一个工作正在进行中,但是,我遇到了一个问题,我一直在尝试几个小时来解决。该代码是从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: %s\n", 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: %s\n", 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: %s\n", 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: %s\n", 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。
我已经在功能上突出显示了我发射另一个cout的功能。
非常感谢。我会在早些时候验证您的回复,但我忘记更新该函数的前向声明,但我仍然遇到问题。现在完美运作。非常感谢。 –