访问 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
,但是无论您尝试使用枚举值做什么都是完全没问题的。
我有以下代码:
// 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
,但是无论您尝试使用枚举值做什么都是完全没问题的。