Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing Enum defined within a class C++

I have the following code:

// 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;

};

How do I access the enum from the method functions: (attempt)

// 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)
{}

The Problem:

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

I'm new to C++ so this might not be good code practice, but I would generally like to know how to achieve this (and also understand why I shouldn't write like this, if it is in fact bad practice)

Thank you

like image 865
Xelphin Avatar asked Feb 22 '26 02:02

Xelphin


1 Answers

You access enum (class) members like you would access any static member. Piece::Color::BLACK in this case.


In the constructor, you could omit the "Piece" part and just write the following:

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

Regarding your hint about this being bad practice: It isn't. You could probably change the int to be a constexpr instead of just const, but whatever you are trying to do with the enum value is totally fine.

like image 90
Max Play Avatar answered Feb 23 '26 18:02

Max Play



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!