簡體   English   中英

將指針傳遞給函數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: %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的功能。

使函數簽名成為對指針的引用,它將把從SDL_CreateRenderer返回的值返回給調用函數(假設gRenderer是傳入的指針):

bool init(SDL_Window *gWindow, SDL_Renderer *&gRenderer)

看起來您也應該以相同的方式傳遞gWindow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM