编译器认为枚举值从 129 开始

Compiler thinks enum values are starting at 129

我最近开始用 D 编写国际象棋引擎。我从编写棋盘表示开始。不久之后,我 运行 遇到了我用于片段的枚举的问题。

enum Piece : ubyte
{
  Empty,
  Pawn,
  Rook,
  Knight,
  Bishop,
  Queen,
  King
}

当我尝试编译它时,我得到一个错误

src/board.d(69): Error: cannot implicitly convert expression (129) of type int to byte

注意:我使用的是 DMD64 D Compiler v2.068.1。我传递的标志可以在我在底部链接的 github 存储库中的 makefile 中找到。

这个错误打印了六次。每次括号中的数字递增一次。所以它从 120 变为 134。行号 69 对应于 Piece 枚举中的 Empty 值。

我试图让值从 0(空)到 6(国王),但出于某种原因,编译器似乎认为它应该从 129 开始。我已经尝试显式设置值,但没有任何区别,编译器仍然会抛出一堆错误。

我可以尝试切换到使用整数来解决这个问题,但这仍然会让编译器认为枚举值从 129 开始,并弄乱我计划使用的位操作。

如果有人能帮我找出这段代码有什么问题,我们将不胜感激。

可以找到完整的程序here

错误消息指向错误的位置。枚举本身很好。

实际错误是Board.pieces类型错误。应该是ubyte[64],不是byte[64].

稍后 try to assign values that have the 8th bit set 失败,因为 byte 的范围太小。

请在 issues.dlang.org 提交问题。