我最近將大型源文件分解爲頭文件和較小的源文件。我從來沒有這樣做過,主要是因爲範圍,我不得不重寫一些函數來接受指針,然後從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的功能。
非常感謝。我會在早些時候驗證您的回覆,但我忘記更新該函數的前向聲明,但我仍然遇到問題。現在完美運作。非常感謝。 –