返回特定于类的enum
Returning class-specific enum
我想实现一个简单的状态机。然而,当我得到一个奇怪的错误:
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;
}
同样,你不应该使用像__STATE_H
这样的保留名称。这可能会伤到你。
在源文件中全局作用域中没有名称eState
,您必须使用作用域操作符::
来告诉编译器该符号处于哪个作用域:
CState::eState CState::eGet(){...}
不,编译器不需要知道你指的是CState::eState
,即使它可能已经算出来了。
相关文章:
- 如何添加依赖于类本身的模板成员变量
- 为什么同时覆盖全局新运算符和特定于类的运算符不是模棱两可的行为?
- 依赖于类成员属性的类实例成员
- 为什么 std::vector 适用于类定义中的不完整类型?
- 如何让成员函数实现依赖于类的模板参数?
- 仅将方法应用于类的一个对象
- 我如何使用explicit模板实例化用于类定义中定义的模板成员函数
- 超载操作员 仅适用于类的特定情况
- 如何在未评估的上下文中将成员函数的结果类型应用于类成员
- 我该如何文档文档以使文档适用于类成员而不是匿名类型
- 类似于类中的 std::map 或 std::vector 的构造函数
- 请澄清术语类静态对象(相对于类静态成员)
- 类名()是否等效于类对象
- 编写专用于类及其子类的函数模板
- 是否存在非POD结构优先于类的有效用例
- "inline"隐式于类定义中定义的C++成员函数中
- 特定于类的new/delete
- 使用依赖于类的类型和函数,在类的所有实例中具有相同值的c++变量
- 如何专门化依赖于类的静态数据成员的模板?
- 返回特定于类的enum