c++ - 如何显示类中某些内容的枚举值?

标签 c++ class enums

我目前正在构建游戏“战舰”的一个糟糕版本,并且必须使用枚举数组来显示棋盘。对于我创建的标题:

enum class PlayerPiece {
  AIRCRAFT,
  BATTLESHIP,
  CRUISER,
  SUBMARINE,
  PATROL,
  EMPTY,
 };

 class Board {
 public:

   PlayerPiece playerBoard[100];
   PlayerPiece enemyBoard[100];

   void reset();
   void display() const;

 };

当我到达源代码时,我尝试将棋盘显示为数字。截至目前,在我运行重置命令后,主板是空的。但是在我想显示数组之后,我收到一条错误消息“没有运算符 << 与这些操作数匹配......”,我知道这意味着我需要重载 << 命令才能正确显示,但为什么不呢只显示分配的“5”?这不是 Enum 的意义吗?到目前为止我所拥有的是:

 void Board::reset(){
   for (int i = 0; i < 100; ++i){
      playerBoard[i] = PlayerPiece::EMPTY;
      enemyBoard[i] = PlayerPiece::EMPTY;
   };
 }

 void Board::display() const{
  for (int i = 0; i < 100; ++i){

    cout << playerBoard[i] << endl; // 

   };
 }

我编写了其他代码,无需重载 << 运算符即可显示 ENUM 附加的数字。我错过了什么吗?任何帮助,将不胜感激。

最佳答案

如果您想查看与作用域枚举类型关联的数字,请使用 static_cast,如下所示:

cout << static_cast<int>(playerBoard[i]) << endl;

普通(无作用域)枚举不需要此转换,因为它们的类型隐式转换为 int 或您指定的任何基础类型。这可能就是为什么这种情况以前没有发生在您身上的原因。

关于c++ - 如何显示类中某些内容的枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40988781/

相关文章:

c++ - Qt4 : write QByteArray to file with filename?

c++ - 模板参数作为函数未命名参数

c# - 构造函数限制

c++:通过索引从列表中获取对象不起作用?

ruby-on-rails - Rails - 在 .where 查询中使用枚举

swift - 从没有 switch/case 的枚举中获取关联值

C#:枚举反模式

c++ - 支持长 double 的最喜欢/最佳 A.X=B 求解器?

c++ - 如何用不同的值填充数组

c++ - ArticxEngine.exe : 0xC0000005: Access violation writing location 0x00000004 中 0x777122D2 (ntdll.dll) 的未处理异常