1

SDLで画面を設定できるように、SDL_Surfaceを関数に渡す方法が少し混乱しています。

これは私のエラーです:

 No operator "=" matches these operands

私の機能はこれです:

void SDL_Start(SDL_Surface screen){
Uint32 videoflags = SDL_SWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT;// | SDL_FULLSCREEN;

// Initialize the SDL library 
    if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
         fprintf(stderr, "Couldn't initialize SDL: %s\n",
         SDL_GetError());
         exit(500);
    }   
//get player's screen info
const SDL_VideoInfo* myScreen = SDL_GetVideoInfo();


//SDL screen

int reso_x = myScreen->current_w;
int reso_y = myScreen->current_h;
Uint8  video_bpp = 32;

//setup Screen [Error on the line below]
screen = SDL_SetVideoMode(reso_x, reso_y, video_bpp, videoflags|SDL_FULLSCREEN); 
}

この関数は私のメイン関数で次のように呼び出されます:

SDL_Surface *screen;
SDL_Start(*screen); 

間違いは何ですか?

4

2 に答える 2

1

SDL_SetVideoMode(ポインター型)を返しますが、 (非ポインター)SDL_Surface*に割り当てています。SDL_Surface

編集:これはおそらくあなたが望むものです。新しいサーフェスへのポインターを返します。

SDL_Surface* SDL_Start() {
Uint32 videoflags = SDL_SWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT;// | SDL_FULLSCREEN;

// Initialize the SDL library 
    if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
         fprintf(stderr, "Couldn't initialize SDL: %s\n",
         SDL_GetError());
         exit(500);
    }   
//get player's screen info
const SDL_VideoInfo* myScreen = SDL_GetVideoInfo();


//SDL screen

int reso_x = myScreen->current_w;
int reso_y = myScreen->current_h;
Uint8  video_bpp = 32;

//setup Screen [Error on the line below]
return SDL_SetVideoMode(reso_x, reso_y, video_bpp, videoflags|SDL_FULLSCREEN); 
}

// ...

SDL_Surface *screen = SDL_Start();
于 2012-10-31T04:33:15.823 に答える
1

SDL_SetVideoModeSDL_Surfaceへのポインタを返します. しかしscreen、ポインターではありません。いずれにせよ、SDL_Surface オブジェクトを値渡しするべきではありません。参照カウントが混乱したり、他の問題が発生したりする可能性があります。私が見ているように、ここには2つの選択肢があります。参照によってSDL_Surfaceポインタを渡します:

void SDL_Start(SDL_Surface*& screen) {
    ...
    screen = SDL_SetVideoMode(reso_x, reso_y, video_bpp, videoflags|SDL_FULLSCREEN);
}

または、関数がパラメーターをとらず、ポインターを返すようにします。

SDL_Surface* SDL_Start() {
    ...
    return SDL_SetVideoMode(reso_x, reso_y, video_bpp, videoflags|SDL_FULLSCREEN);
}
于 2012-10-31T04:34:23.093 に答える