SDL_MapRGB,如何使用指针到指针获取屏幕>格式
SDL_MapRGB, how to get screen->format using pointer to pointer
我正在使用函数生成一个关卡,所以我发送一个指向屏幕指针的指针来更新他。但是当我尝试使用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((;一切都很好,但是这个,我不知道该怎么做。尝试使用*屏幕>格式,**屏幕>格式,屏幕>格式,甚至&屏幕>格式(我是多么绝望^^(。
编辑:错误
错误:在"* 屏幕"中请求成员"格式",其指针类型为"SDL_Surface*"(也许您打算使用"->"?`
TL;DR 解决方案 --> 将代码更改为 (*screen)->format
.
原因:
根据运算符优先级规则,
->
运算符 [通过指针进行结构和联合成员访问] 的优先级高于*
[间接寻址(取消引用(] 运算符。
所以,你的代码*screen->format
,实际上是像
*(screen->format)
这意味着,
- 它试图从指针访问
format
成员变量screen
- [理想情况下]试图取消引用
screen->format
.
但是,根据定义,SDL_Surface** screen
,screen
是SDL_Surface**
,而不是SDL_Surface*
。这就是您收到错误的原因。
你想要的其实是
- 取消引用
screen
以获取SDL_Surface*
指针 [(*screen)
] - 然后,从该指针访问
format
成员变量。[(*screen)->format
]
一元*
取消引用运算符的运算符优先级低于结构指针访问运算符 ->
。这意味着你实际上是在做*(screen->format)
。
您需要一些括号才能获得正确的优先级:(*screen)->format
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 作为参数传递的打印功能指针导致屏幕上打印"1"
- SDL_MapRGB,如何使用指针到指针获取屏幕>格式
- SDL 2通过SpriteManager在屏幕上显示图像,获得指针中断
- 快板/ c++:屏幕是空指针
- Cinder:如何获得一个指针的数据帧生成,但从未显示在屏幕上