2013-05-13 82 views
-3

我在GlobalGameEnums.h中创建了一个枚举。我已经在我的类中声明的Board.h中包含了此头文件,但它不会让我使用枚举值。错误:枚举“e_Sides”没有成员“左”

的GlobalGameEnums.h:

#ifdef GLOBALGAMEENUMS_H 
#define GLOBALGAMEENUMS_H 

enum class e_Side 
{ 
    Right, 
    Left 
}; 

#endif 

而且Board.h:

#ifndef BOARD_H 
    . 
    . 
    #include "GlobalGameEnums.h" 

    class Board 
    { 
    public: 
    Board(int i_boardSize, int i_lowBound, int i_highBound); 
    ~Board(); 

    int MakePlayerMove(enum e_Side i_sideTaken) 
    { 
     switch (i_sideTaken) 
     { 
     case e_Side::Left: 
      break; 
     case e_Side::Right: 
      break; 
     } 
    } 

    private: 
    std::vector<Cell> m_cellVector; 
    }; 

#endif 

在方法MakePlayerMove的声明确实承认e_Side类型,但在方法体中它给了我一个错误使用左/右(Error: enum "e_Side" has no member "Left")。

我已经尝试了很多配置,并搜索了一个旧的解决方案,但无法让它工作。

+0

避免发生ifndef错误的一种方法是使用['#pragma once'](https://en.wikipedia.org/wiki/Pragma_once),而不是如果你有它的支持 – 2013-05-13 18:29:40

回答

5

枚举头中的头文件是错误的。你有#ifdef而不是#ifndef。

+0

如果这个是这样的,它不应该在'MakePlayerMove'参数上给出一个更早的错误吗? – 2013-05-13 18:29:45

+0

@MarkRansom:这回到我的C脑,但我相信用enum specifier编写的参数作为前向声明。他正在创建一个新的嵌套枚举类型。 – 2013-05-13 18:30:59

+0

哇。傻我。 tnx很多 – DoubleV 2013-05-13 18:47:30

-1

对于预C++ 11,宣布你的枚举是这样的:

#ifndef GLOBALGAMEENUMS_H 
#define GLOBALGAMEENUMS_H 

namespace mygame 
{ 
    enum e_Side { 
     Right, 
     Left 
    }; 
} 

#endif 

不要在枚举声明中使用 '类'。 你Board类应该是这样的:

#ifndef BOARD_H 
#define BOARD_H 
... 
#include "GlobalGameEnums.h" 
... 

    namespace mygame 
    { 
     class Board 
      { 
      public: 
      Board(int i_boardSize, int i_lowBound, int i_highBound); 
      ~Board(); 

      int MakePlayerMove(e_Side temp_sideTaken) 
      { 
       e_Side i_sideTaken = Left; 
       switch (i_sideTaken) 
       { 
       case Left: 
        break; 
       case Right: 
        break; 
       } 
      } 

      private: 
      std::vector<Cell> m_cellVector; 
      }; 
    } 

    #endif 

我也建议使用的名称空间。

+0

enum类是一个C++ 11功能。这是完全有效的。 – 2013-05-13 18:54:03

+0

够公平的。我不认为这个问题是特定于C++ 11的 – DmitriD 2013-05-13 18:59:33