【问题标题】:An Array of ALLEGRO_BITMAP type objectsALLEGRO_BITMAP 类型对象的数组
【发布时间】:2012-06-06 08:52:59
【问题描述】:

所以我正在使用 Allegro 制作游戏,并尝试创建一个代表棋盘的 ALLEGRO_BITMAP 类型对象的数组,这样我就可以在游戏开始时一次性加载所有图像文件而无需每次我想重绘它们时加载它们。我试图这样做:

ALLEGRO_BITMAP files[10];

得到以下编译错误:“字段的类型不完整 ALLEGRO_BITMAP”

我也试过了:

ALLEGRO_BITMAP* files = new ALLEGRO_BITMAP[10];

得到编译错误:'Allocation of Complete type ALLEGRO_BITMAP'

我觉得这与编译器不知道 ALLEGRO_BITMAP 类型的大小有关,因此不知道如何为这种类型的数组分配内存(但如果我错了,请有人纠正我) .我想知道是否有人知道解决这个问题的方法?或者另一种方法来实现我预先存储 ALLEGRO_BITMAP 对象的目标,而不是在我想重绘图块时加载图像文件?我显然可以创建 10 个不同的变量并将文件存储在其中,但这很糟糕。我也尝试过使用向量,但这些也不起作用。

【问题讨论】:

  • 您似乎缺少一些包含指令。编译器不知道 ALLEGRO_BITMAP 类型。检查您的加入。
  • @Heisenbug 我的包含很好,并添加以下行:'ALLEGRO_BITMAP * b;'编译得很好。只有当我尝试分配一个数组时。
  • 我猜你刚刚转发了它。所以你可以使用指针但不能分配,因为你实际上不知道结构的大小。
  • @Heisenbug 我的想法完全一致,但我希望得到某种确认/解决方案。也许其他人可以证实这个理论?
  • 解决方案是删除前向声明(如果有),并在定义中包含头文件。抱歉,我不知道是哪个文件,我根本不知道 allegro。尝试用谷歌搜索它。

标签: c++ arrays memory-management allegro


【解决方案1】:

Allegro 5 的大多数数据类型都是不透明的。

你需要创建一个指针数组:

ALLEGRO_BITMAP *files[10];
files[0] = al_create_bitmap(640, 480);

【讨论】:

  • 这是有道理的。快速的问题,虽然只是为了我的一般知识:不透明是什么意思?
  • 等等,别介意我的错误。所以 al_create_bitmap 返回指向 ALLEGRO_BITMAP 对象的指针,而不是对象本身?对不起,我没有意识到这一点。谢谢!
  • @user1413793,一种不透明的数据结构是一种不透露其“内部结构”的结构。这就是公共头文件中的全部内容:typedef struct ALLEGRO_BITMAP ALLEGRO_BITMAP。因此,您使用al_get_bitmap_width(bmp) 而不是bmp->w。这样做的目的是向用户代码公开更少的实现细节,从而更容易在未来进行更改。如果你真的想访问 Allegro 5 中的位图结构,你需要包含一个单独的私有头文件,但要理解它不能保证将来兼容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2017-09-19
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
相关资源
最近更新 更多