Enum类超出范围 - C ++

时间:2016-12-06 23:04:52

标签: c++ class enums scope

这是我目前的计划 头文件

#ifndef BOARD_H
#define BOARD_H
class Board {
enum class EnemyPiece {HIT, MISS, EMPTY};
enum class PlayerPiece {AIRCRAFT, BATTLESHIP, CRUISER, SUBMARINE, PATROL, EMPTY};
  private:
     PlayerPiece playerboard[100];
     PlayerPiece enemyboard[100];
  public:
     Board();
     void reset(PlayerPiece *a , PlayerPiece *b);
   };
#endif

这是cpp文件

#include <iostream>
#include "Board.h"

using namespace std;

 Board::Board()
 {
  reset(playerboard, enemyboard);
 }

 void Board::reset(PlayerPiece *year, PlayerPiece *month)
 {
  std::cout << static_cast<std::underlying_type<PlayerPiece>::type>(PATROL) << std::endl;
 }

在成员函数中我试图强制转换枚举类型但是无论我在减速器放在头文件中的哪个位置,我都会继续 &#34; PATROL&#34;在这方面没有申明 有什么我做错了吗?枚举类应该放在其他地方吗?

2 个答案:

答案 0 :(得分:0)

使用enum class时,令牌的范围在该类型下。因此,您需要使用PlayerPiece::PATROL而不仅仅是PATROL

来自C ++ 11标准:

  

7.2枚举声明

     

...

     

2 ... 枚举键 enum classenum struct在语义上是等效的;使用其中一个声明的枚举类型是范围的枚举,其枚举器范围的枚举器

答案 1 :(得分:0)

尝试

Board::PlayerPiece::PATROL

只是

PlayerPiece::PATROL

因为枚举是在类范围内使用的。

如果您要将它们作为公共成员函数的参数接受,则将枚举声明为public。

似乎有一个错字

#ifndef BOARD_H
#define BOARD_H
#ifndef BOARD_H
^^^^^^^^^^^^^^^

删除最后一个#ifndef