C++ SDL_MapRGB,如何获取屏幕->;使用指针到指针的格式

C++ SDL_MapRGB,如何获取屏幕->;使用指针到指针的格式,c++,c,pointers,sdl,sdl-1.2,C++,C,Pointers,Sdl,Sdl 1.2,我使用一个函数生成一个级别,所以我向屏幕的指针发送一个指针来更新它。 但是当我尝试使用SDL_MapRGB时,我在*屏幕->格式部分遇到了一个错误。 有办法做到这一点吗? 以下是我使用的代码: void generateLevel(SDL_Surface** screen) { int i=0, j=0; char object =' '; FILE* level = NULL; SDL_Surface* lvl[LARGEUR_MAP][HAUTEUR_MAP]

我使用一个函数生成一个级别,所以我向屏幕的指针发送一个指针来更新它。 但是当我尝试使用SDL_MapRGB时,我在
*屏幕->格式部分遇到了一个错误。
有办法做到这一点吗?
以下是我使用的代码:

void generateLevel(SDL_Surface** screen)
{
    int i=0, j=0;
    char object =' ';
    FILE* level = NULL;
    SDL_Surface* lvl[LARGEUR_MAP][HAUTEUR_MAP];
    SDL_Rect posElem;

    //Ouverture du fichier contenant les infos du niveau
    level = fopen("lvl.txt","r");

    if(level == NULL)
    {
        fprintf(stderr,"Erreur lors de l'ouverture du fichier");
        exit(EXIT_FAILURE);
    }

    //Boucle pour lire le fichier et placer les éléments du décor
    for(j=0;j<HAUTEUR_MAP;j++)
    {
        for(i=0;i<LARGEUR_MAP;i++)
        {
            object = fgetc(level);
            if(object == '\n')
                object = fgetc(level);
            switch(object)
            {
                case 'm':
                    lvl[i][j] = IMG_Load("images\\mur.jpg");
                    posElem.x = i*TAILLE_BLOC;
                    posElem.y = j*TAILLE_BLOC;
                    SDL_BlitSurface(lvl[i][j], NULL, *screen, &posElem);
                    break;
            }


        }
    }

    SDL_FillRect(*screen, NULL, SDL_MapRGB(*screen->format,255,255,255));
    SDL_Flip(*screen);
    fclose(level);
}
void generateLevel(SDL_表面**屏幕)
{
int i=0,j=0;
char对象=“”;
文件*level=NULL;
SDL_表面*lvl[大地图][豪特地图];
SDL_Rect posElem;
//《纽约新闻报》内容简介
级别=fopen(“lvl.txt”、“r”);
如果(级别==NULL)
{
fprintf(标准,即“菲舍尔的爱情”);
退出(退出失败);
}
//花束的颜色和装饰物的颜色
对于(j=0;jformat,**屏幕->格式,屏幕->格式,甚至&screen->格式(我多么绝望^^)

编辑:错误

错误:请求“*screen”中的成员“format”,其指针类型为“SDL_Surface*”(可能您打算使用“->”?)`


一元
*
解引用运算符的值低于结构指针访问运算符
->
。这意味着您实际上正在执行
*(屏幕->格式)


您需要一些括号来获得正确的优先级:
(*screen)->format

一元
*
解引用运算符的优先级低于结构指针访问运算符的优先级
->->
。这意味着您实际上正在执行
*(screen->format)

您需要一些括号来获得正确的优先级:
(*屏幕)->格式

TL;DR解决方案-->将代码更改为
(*屏幕)->格式

原因:

按照规定,

->
运算符[通过指针访问结构和联合成员]的优先级高于
*
[间接(取消引用)]运算符

因此,您的代码
*screen->format
,实际上表现为

 *(screen->format)
也就是说

  • 它正试图从
    屏幕
    指针访问
    格式
    成员变量
  • 它[理想地]尝试取消对
    screen->format
    的引用
  • 但是,根据定义,
    SDL\u Surface**screen
    screen
    SDL\u Surface**
    ,而不是
    SDL\u Surface*
    。这就是为什么会出现错误

    你真正想要的是

  • 取消引用
    屏幕
    以获取
    SDL\U曲面*
    指针[
    (*屏幕)
    ]
  • 然后,从该指针访问
    format
    成员变量。[
    (*屏幕)->format
    ]
  • TL;DR解决方案-->将代码更改为
    (*屏幕)->格式

    原因:

    按照规定,

    ->
    运算符[通过指针访问结构和联合成员]的优先级高于
    *
    [间接(取消引用)]运算符

    因此,您的代码
    *screen->format
    ,实际上表现为

     *(screen->format)
    
    也就是说

  • 它正试图从
    屏幕
    指针访问
    格式
    成员变量
  • 它[理想地]尝试取消对
    screen->format
    的引用
  • 但是,根据定义,
    SDL\u Surface**screen
    screen
    SDL\u Surface**
    ,而不是
    SDL\u Surface*
    。这就是为什么会出现错误

    你真正想要的是

  • 取消引用
    屏幕
    以获取
    SDL\U曲面*
    指针[
    (*屏幕)
    ]
  • 然后,从该指针访问
    format
    成员变量。[
    (*屏幕)->format
    ]

  • (*屏幕)->格式如何
    ?太好了!你总是在这里帮助苏拉夫:)我能问你为什么需要“()“?它与作为注释发布的有点长。我将在我的回答中详细说明:-)您的函数接受
    SDL\u Surface**screen
    而不仅仅是
    SDL\u Surface*screen
    ?您可以避免在任何地方都需要遵守
    screen
    两次(即,您可以简单地编写
    screen->format
    )通过更改此项。@AtlasC1我正在启动此代码。我不知道此函数将包含什么,我讨厌生成包含大量参数的函数,因此我更喜欢使用双指针。但是,是的,目前我只需返回屏幕,这将更容易:)编辑:我在说一些愚蠢的事情(我刚刚醒来,这一定会有帮助^^)。参数和函数返回的内容之间没有相关性。
    (*screen)->format
    ?太好了!你总是在这里帮助Sourav:)我可以问你为什么需要“()”?它与作为注释发布的有点长。我将在我的回答中详细说明:-)你的函数接受
    SDL\u Surface**screen
    而不是只接受
    SDL\u Surface*screen
    ?你可以避免在任何地方都需要遵守
    screen
    两次(也就是说,你可以简单地编写
    screen->format
    )通过更改此项。@AtlasC1我正在启动此代码。我不知道此函数将包含什么,我讨厌生成包含大量参数的函数,因此我更喜欢使用双指针。但是,是的,目前我只需返回屏幕,这将更容易:)编辑:我在说一些愚蠢的事情(我刚刚醒来,这一定会有帮助^^)。参数和函数返回的内容之间没有关系。哈哈,好吧,谢谢!最近几天我学到了很多关于指针的知识!@Sourav Ghosh谢谢你们太多人;)祝你们两个过得愉快。哈哈,好吧,谢谢!我最近学了很多关于指针的知识!@Sourav Ghosh谢谢你们太多人;)祝你们两个过得愉快。哇,好的,我很高兴看你在同一时间给我的上面的链接;)这一切都有点棘手!我必须把手放在这上面。谢谢你的清楚解释。哇,好的。我在看你在同一时间给我的上面的链接;)这一切都有点棘手!我必须把手放在这上面。谢谢你的清楚解释。