我有一个要实现的简单状态机。但是,当我遇到一个奇怪的错误时:
State.cp:7:1: error: 'eState' does not name a type
eState CState::eGet(){
^
eState
是来自类 CState
的枚举器:
#ifndef __STATE_H
#define __STATE_H
#include <string>
class CState {
public:
enum eState {
eData,
eInterface,
ePresentation,
eExit
};
它(目前,非功能性)像这样返回:
private:
eState Current;
public:
estate eGet();
其中 eGet()
的定义如下:
eState CState::eGet(){
return Current;
};
我正在尝试将 .eGet()
用作开关值,但我的主要函数告诉我枚举值未“在此范围内声明”
现在很明显,我可以将枚举器移动到 "Common.h"
文件并让每个人都 #include
,但它很明显属于状态类, 所以我宁愿把它放在那里。
最佳答案
枚举的作用域在类内部,但函数定义的返回类型不是。所以你需要指定范围:
CState::eState CState::eGet(){
return Current;
} // NOTE: no ; here
函数体、参数列表和尾随返回类型(如果存在)都在类范围内,因此您不需要在那里进行额外的限定。因此,从 C++11 开始,您还可以这样定义函数:
auto CState::eGet() -> eState {
return Current;
}
另外,你不应该使用 reserved names像 __STATE_H
。它可以bite you later .
关于c++ - 返回特定于类的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993783/