错误:枚举“e_Sides”没有成员“Left”

时间:2013-05-13 18:25:08

标签: c++ enums

我在GlobalGameEnums.h中创建了一个枚举。我已经在Board.h中包含了这个标题,我已经在我的类中声明了但它不会让我使用枚举值。

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")的错误。

我尝试了很多配置并搜索了一个旧的解决方案,但无法使其正常工作。

2 个答案:

答案 0 :(得分:5)

枚举标头中的标头保护错误。你有#ifdef而不是#ifndef。

答案 1 :(得分:-1)

对于预C ++ 11,请按以下方式声明你的枚举:

#ifndef GLOBALGAMEENUMS_H
#define GLOBALGAMEENUMS_H

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

#endif

请勿在枚举声明中使用“class”。 您的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

我也鼓励使用名称空间。