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

时间:2016-12-06 06:01:32

标签: c++ class enums

我目前正在构建游戏“Battleship”的糟糕版本,并且必须使用一系列Enums来显示棋盘。对于我创建的标题:

 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; // 

   };
 }

当我找到我的源代码时,我尝试将该板显示为数字。截至目前,我运行我的重置命令后,该板是EMPTY。但是在我想显示数组之后,我得到一个错误,说“没有运算符&lt;&lt;匹配这些操作数......”,我明白这意味着我需要重载&lt;&lt;命令显示正确,但为什么不显示已分配的'5'?这不是恩赐的观点吗?到目前为止我所拥有的是:

{{1}}

我已经制作了其他代码,我不必重载&lt;&lt;操作员显示ENUM附带的编号。我错过了什么吗?任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

如果删除该类并使用Unscoped枚举编写枚举

enum PlayerPiece {

  AIRCRAFT,

  BATTLESHIP,

  CRUISER,

  SUBMARINE,

  PATROL,

  EMPTY,

 };

您可以打印所需的号码。

作用域和未作用域的区别(来自cplusplus.com):

在C ++ 11之前,所有的枚举都只是整数。你可以这样使用它们。这使得为​​期望有限的一组值的函数提供坏值变得太容易了。例如:

1
2
3
4
5
6
7
8
9
10
enum round_mode { round_half_up, round_half_down, round_bankers };

double round( double x, round_mode = round_half_up )
{
   ...
};

    int main()
    {
      double x = round( 2.5, 42 );
}

编辑&amp;运行

它编译,但它并不漂亮。

使用C ++ 11,编译器现在知道关于你的枚举的各种事情,并且不会让你轻易地将它们与不正确的值混合在一起。

基本上,它将枚举提升为第一类对象 - 它不仅仅是一个整数。

另一个问题是每个枚举的名称会渗透到包含范围中。所以以下是名称冲突:

1 2 enum color_masks {red = 0xFF0000,green = 0x00FF00,blue = 0x0000FF}; int red = 0xFF0000;

你不能同时拥有标识符&#39; red&#39;作为枚举值和同一范围内的整数变量名。

虽然这里的例子是人为的,但它与那些一直发生的事情相距甚远 - 并且程序员必须努力避免。

(有些标识符名称是常见的。例如,&#39; max&#39;。如果你#include,那里有一个最大的宏,如果你也是那么会造成严重破坏#include并尝试使用&#39; max&#39;函数或#include并尝试查找numeric_limit :: max()。我知道这是一个宏问题,但它是第一个姓名冲突我可以想出......)