C ++ - 将指针传递给函数并将其用作另一个函数的参数

时间:2018-02-17 13:33:15

标签: c++ sdl-2

我目前正在用C ++重新编程编写一个小游戏。我正在使用Visual Studio 2017和SDL2。我正在按照一系列教程进入SDL。我的问题似乎与我没有完全理解c ++中指针的工作方式有关。我传递一个指向函数的指针作为参数,并希望在此函数中使用它作为另一个函数的参数,该函数返回指向SDL_Surface的指针。按照我的代码:

init SDL:

SDL_Surface* init(SDL_Window *window)
{
  SDL_Surface *screenSurface = nullptr;
  if (SDL_Init(SDL_INIT_VIDEO) < 0)
  {
    printf("%s", "Error in init");    
  }
  else
  {   
    screenSurface = SDL_GetWindowSurface(window);
  }

  return screenSurface;
}

加载bmp:

SDL_Surface* loadMedia(const char file[])
{
  SDL_Surface *image = SDL_LoadBMP(file);
  if (image == nullptr)
  {
    printf("%s", "Error in loadMedia");
  }
  return image;
}

主:

int main(int argc, char *argv[])
{
  SDL_Window *window = SDL_CreateWindow("xyz", SDL_WINDOWPOS_UNDEFINED, 
  SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

  SDL_Surface *screenSurface = init(window);
  if (screenSurface == nullptr)
  {
    printf("%s", "surface is null");
  }

  SDL_Surface *image = loadMedia("resources/images/village.bmp");
  SDL_BlitSurface(image, NULL, screenSurface, NULL);

  SDL_UpdateWindowSurface(window);
  SDL_Delay(1000);

  SDL_FreeSurface(image);
  image = nullptr;
  SDL_DestroyWindow(window);
  window = nullptr;
  SDL_Quit();

  return 0;
}

如果我创建

SDL_Window *window = SDL_CreateWindow("xyz",...)

作为全局变量并在init()中初始化它,一切正常,screenSurface用有效值初始化。只要我在代码中执行操作,将指针窗口传递给init()以在那里创建表面,然后返回screenSurface,screenSurface = SDL_GetWindowSurface(window)返回null。

我最近几年一直在编写SAS和Java编程,并且几年没有触及c ++,所以我确定它只是我身边的一个小误会,但我无法弄清楚它是什么。

提前Thx:)

0 个答案:

没有答案