【发布时间】:2013-06-11 17:24:51
【问题描述】:
在 C++ 中使用 enum 时,如何创建 getter 和 setter?
例子:
enum class FieldLayerStates
{
kEmpty = 0, // new to the game.
kActive = 1, // has fields already in the same.
kAdd = 2 // field layer is ready to have a field added.
};
FieldLayerStates _fieldLayerState;
inline FieldLayerStates getFieldLayerState() { return _fieldLayerState; };
inline void setFieldLayerState(FieldLayerStates i) { _fieldLayerState = i; };
我在内联函数中遇到错误:
: Unknown type name 'FieldLayerStates'
: Cannot initialize return object of type 'int' with an lvalue of type 'FieldLayer::FieldLayerStates'
当我去使用它时:
// check the status of the layer to see if it has fields in it already (loaded from CCUserDefaults
if (getFields().empty())
{
// nothing, this must be our first time in.
setFieldLayerStatus(kEmpty);
}
它说kEmpty 未声明。
有人可以帮我解惑吗?
【问题讨论】:
-
从 cmets 我猜你想使用一个位字段来存储不同的状态,枚举并不适合。您完全错误地陈述了您的问题,这就是为什么您不明白人们对您说的话的原因!我推荐一个具有公共属性的简单类,然后可能有 getter/setter,该类将充当你想要的位字段,丢失枚举。
-
@Paul,枚举适用于位掩码,但 scoped 枚举不方便
-
@JonathanWakely 枚举对于存储状态有什么好处?这不是你能做的:UserState::IsOnline = 1;或 UserState::IsOnline = 0;如果 UserState 是一个枚举。
-
@Paul, UserState state = IsOnline; if(state == IsOnline) ... 那有什么问题? C++ 标准甚至说枚举可用于实现位掩码,请参见第 17 条。也许您忽略了枚举类型和枚举数之间的区别?
-
天哪,我搞砸了,我很抱歉我造成的混乱。 @JonathanWakely 感谢您的澄清。
标签: c++ c++11 enums compiler-errors