3

将以下工作:

enum TileBmp {Mask, Grass, Sand, Snow, Swamp, Paved, Rock, Savannah, Lava}

ID2D1Bitmap* pBmpTile[TileBmp];

这会创建一个大小为 9 的数组,其中任何元素都可以使用其编号或名称访问?例如,pBmpTile[3] 和 pBmpTile[Snow] 是否都指向同一个 ID2D1Bitmap*?

我现在无法尝试,直到某些时候才能尝试。否则我会自己尝试。

如果这不起作用,是否有更清洁的替代方案

ID2D1Bitmap* pBmpTile[9]

ID2D1Bitmap* pBmpMask, pBmpGrass, pBmpSand, pBmpSnow, pBmpSwamp, pBmpPaved, pBmpRock, pBmpSavannah, pBmpLava;

?

4

2 回答 2

8

TileBmp是一个类型,你的数组声明需要一个数字,而不是一个类型

这将起作用,因为单个enum可以转换为整数。

enum TileBmp {Mask, Grass, Sand, Snow, Swamp, Paved, Rock, Savannah, Lava, TILEBMP_COUNT};

ID2D1Bitmap* pBmpTile[TILEBMP_COUNT];

pBmpTile[3] 和 pBmpTile[Snow] 是否都指向同一个 ID2D1Bitmap*?

在这个例子中,是的。

除非另有说明,否则 an 中的第一个值enum可以转换为,0并且每个其他枚举都1大于enum它之前的值。

于 2013-04-01T00:40:47.273 回答
1
ID2D1Bitmap* pBmpTile[TileBmp];

不会工作。枚举名称不是主要表达式,不能用作数组大小。

但是,您可以使用枚举字段来访问数组元素,因为枚举字段映射到整数。例如:

  enum TileBmp {Mask, Grass, Sand, Snow, Swamp, Paved, Rock, Savannah, Lava};
  int A[10] = {0,1,2,3,4,5,6,7,8,9};
  std::cout << A[Sand]; //it will print 2 in this case.
于 2013-04-01T00:41:42.627 回答