返回特定于类的枚举

时间:2014-07-28 10:58:59

标签: 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()作为切换值,但我的主要功能告诉我在此范围内声明了枚举值&#34;#34;

现在显然,我可以将枚举器移动到"Common.h"文件并让每个人都#include,但它显然属于州级,所以我更愿意保留它那里。

2 个答案:

答案 0 :(得分:3)

枚举的作用域是在类中,但函数定义的返回类型不是。所以你需要指定范围:

CState::eState CState::eGet(){
    return Current;
}  // NOTE: no ; here

函数体,参数列表和尾随返回类型(如果存在)都在类范围内,因此您不需要额外的限定条件。所以,从C ++ 11开始,你也可以这样定义函数:

auto CState::eGet() -> eState {
    return Current;
}

此外,您不应使用__STATE_H之类的reserved names。它可以bite you later

答案 1 :(得分:2)

在源文件中,全局范围内没有名称eState,您必须使用作用域运算符::来告诉编译器符号所在的范围:

CState::eState CState::eGet(){...}

不,编译器不需要知道你的意思是CState::eState,即使它可能已经弄明白了。