c++ - 返回特定于类的枚举

标签 c++ class gcc

我有一个要实现的简单状态机。但是,当我遇到一个奇怪的错误时:

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/

相关文章:

c - 段错误(核心转储)-我的代码出了什么问题

c++ - 消息处理函数中的 afx_msg 术语

c++ - 通过发音查找相似词 - 算法、方法、库

css - 如何使用 SASS 定义 css 选择器类前缀

unix - dyld : Library not loaded:/usr/local/gfortran/lib/libgfortran. 3.dylib原因:找不到图像

c - 在 Qt Creator 中启用 C99

c++ - 仅在 Release模式下出现编译错误——STL vector

c++ - Boost编译器错误?

Java静态字段的使用

c# - 装饰类或参数是什么意思?