访问 class C++ 中定义的枚举

Accessing Enum defined within a class C++

我有以下代码:

// Piece.h
class Piece 
{

  public:
    enum class Color {BLACK, WHITE};

    Piece();
    Piece(int x, int y, Piece::Color color);
    

  private:
    int m_x;
    int m_y;
    Piece::Color m_color;
    static const int UNINITIALIZED = -1;

};

如何从方法函数访问枚举: (尝试)

// Piece.cpp
Piece::Piece() :
  m_x(Piece::UNINITIALIZED),
  m_y(Piece::UNINITIALIZED),
  m_color(Piece::Color BLACK) // PROBLEM
{}

Piece::Piece(int x, int y, Piece::Color color) :
  m_x(x),
  m_y(y),
  m_color(color)
{}

问题:

Piece.cpp: In constructor ‘Piece::Piece()’:
Piece.cpp:8:24: error: expected primary-expression before ‘BLACK’
    8 |   m_color(Piece::Color BLACK)

我是 C++ 的新手,所以这可能不是很好的代码实践,但我通常想知道如何实现这一点(并且也理解为什么我不应该这样写,如果它实际上很糟糕练习)

谢谢

您可以像访问任何静态成员一样访问枚举 (class) 成员。 Piece::Color::BLACK 在这种情况下。


在构造函数中,您可以省略“Piece”部分,只写以下内容:

Piece::Piece() :
  m_x(UNINITIALIZED),
  m_y(UNINITIALIZED),
  m_color(Color::BLACK)
{}

关于您关于这是不良做法的暗示:事实并非如此。您可能会将 int 更改为 constexpr 而不仅仅是 const,但是无论您尝试使用枚举值做什么都是完全没问题的。