2014-12-19 16 views
1

我使用一個函數生成一個級別,所以我發送一個指向我的屏幕指針來更新他。 但是,當我嘗試使用SDL_MapRGB時,在*screen->format部件上出現錯誤。 有沒有辦法做到這一點? 下面是我使用的代碼: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); 
} 

的錯誤出現在代碼的結尾,在SDL_FillRect(); 一切工作正常,但這,我不知道如何做到這一點。試着用*屏幕 - >格式,**屏幕 - >格式,屏幕 - >格式,甚至屏幕 - >格式(我多麼迫不及待地^ ^)。

編輯:錯誤

error: request for member 'format' in '* screen', which is of pointer type 'SDL_Surface*' (maybe you meant to use '->' ?)"`

+1

'(* screen) - > format'? – 2014-12-19 11:42:30

+0

完美!你總是在這裏幫助Sourav :) 我可以問你爲什麼需要「()」嗎? – DoT 2014-12-19 11:43:53

+0

它與[運算符優先級](http://en.cppreference.com/w/c/language/operator_precedence)相關。有點長,要發表評論。我會在我的答案中詳細說明。 :-) – 2014-12-19 11:44:49

回答

2

一元*引用操作符具有比結構指針訪問運算符->operator precedence較低。這意味着你實際上在做*(screen->format)

你需要一些括號以得到正確的優先順序:(*screen)->format

+0

哈哈,謝謝!我正在學習很多關於這些指針的最後日子! @Sourav Ghosh謝謝你也是男人;) 祝你有個美好的一天。 – DoT 2014-12-19 11:47:01

3

TL; DR解決方案 - >更改代碼(*screen)->format

原因:

作爲每operator precedence規則,

->運算符[結構體與共用構件通過訪問指針]具有較高優先級* [間接尋址(解引用)]運算符。

所以,你的代碼*screen->format,是有效表現得像

*(screen->format) 

這意味着,

  1. 它試圖從screen指針
  2. 它的訪問format成員變量[理想]試圖解除引用screen->format

但是,按照定義,SDL_Surface** screenscreenSDL_Surface**,不SDL_Surface*。這就是你遇到錯誤的原因。

你想要的其實是

  1. 提領screen獲得SDL_Surface*指針[(*screen)]
  2. 然後,從該指針訪問format成員變量。 '(* screen) - > format`?[(*screen)->format]
+0

哇,好的。我在同一時間查看上面給出的鏈接;) 這一切都有點棘手!我必須在這方面努力。 感謝您的明確解釋。 – DoT 2014-12-19 11:58:39

+0

@SoJJu歡迎您。 :-) – 2014-12-19 11:59:43

相關問題