-2

我在 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 类型,但在方法主体中,它给了我使用 Left/Right ( Error: enum "e_Side" has no member "Left") 的错误。

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

4

2 回答 2

5

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

于 2013-05-13T18:27:43.387 回答
-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

我也鼓励使用名称空间。

于 2013-05-13T18:40:51.223 回答