1

我有点困惑如何将我的 SDL_Surface 传递给我的函数,以便我可以在 SDL 中设置我的屏幕。

这是我的错误:

 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_SetVideoMode返回指向 SDL_Surface 的指针。但screen不是指针。无论如何,您都不应该按值传递 SDL_Surface 对象,这会弄乱它们的引用计数,并可能会出现其他问题。如我所见,您在这里有两个选择。通过引用传递一个 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 回答