C++ SDL_MapRGB,如何获取屏幕->;使用指针到指针的格式
我使用一个函数生成一个级别,所以我向屏幕的指针发送一个指针来更新它。 但是当我尝试使用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]
*屏幕->格式部分遇到了一个错误。
有办法做到这一点吗?
以下是我使用的代码:
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谢谢你们太多人;)祝你们两个过得愉快。哇,好的,我很高兴看你在同一时间给我的上面的链接;)这一切都有点棘手!我必须把手放在这上面。谢谢你的清楚解释。哇,好的。我在看你在同一时间给我的上面的链接;)这一切都有点棘手!我必须把手放在这上面。谢谢你的清楚解释。