我正在使用函数生成一个级别,所以我发送一个指向我的屏幕指针的指针来更新他。
但是当我尝试使用SDL_MapRGB时,我在*screen->format
部分收到错误。
有没有办法做到这一点 ?
这是我正在使用的代码:
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()上; 一切都很好但是这个,我无法弄清楚如何做到这一点。尝试使用* screen-&gt;格式,** screen-&gt;格式,screen-&gt;格式,甚至&amp; screen-&gt;格式(我是多么绝望^^)。
编辑:错误
错误:请求'* screen'中的成员'format',它是指针类型'SDL_Surface *'(也许你打算使用' - &gt;'?)“`
答案 0 :(得分:3)
TL; DR解决方案 - &gt;将您的代码更改为(*screen)->format
。
原因:
根据operator precedence规则,
->
运算符[通过指针进行结构和联合成员访问]在*
[间接(取消引用)]运算符上具有更高优先级。
因此,您的代码*screen->format
有效的行为类似于
*(screen->format)
这意味着,
format
指针screen
成员变量
screen->format
。但是,根据定义,SDL_Surface** screen
,screen
是SDL_Surface**
,而不是SDL_Surface*
。这就是你收到错误的原因。
你想要的实际上是
screen
以获取SDL_Surface*
指针[(*screen)
] format
成员变量。 [(*screen)->format
] 答案 1 :(得分:2)
一元*
解除引用运算符的结构指针访问运算符->
低operator precedence。这意味着你实际上在做*(screen->format)
。
您需要一些括号来获得正确的优先权:(*screen)->format