为什么可以将枚举作为函数变量传递而不是返回枚举?

时间:2011-12-23 13:53:35

标签: c++ class enums public

我对我现在遇到的错误感到困惑。我班上有一个getter / setter。 setter将枚举作为参数,getter应返回此枚举。但是,我为getter收到了这个错误:

  

错误:C2143:语法错误:缺少';'在'Session :: type'之前

好像SessionType未定义。但是我没有为setter获得相同的错误。有什么理由吗?有没有办法解决这个错误?

(顺便说一句,如果我返回一个int它会编译好但我宁愿让getter与setter保持一致)

这是我的代码:

Session.h

class Session {

public:

    enum SessionType {
        FreeStyle,
        TypeIn,
        MCQ
    };

    explicit Session();
    SessionType type() const;
    void setType(SessionType v);

private:

    SessionType type_;

}

Session.cpp:

SessionType Session::type() const { // ERROR!!
    return type_;
}

void Session::setType(SessionType v) { // No error?
    if (type_ == v) return;
    type_ = v;
}

3 个答案:

答案 0 :(得分:7)

更改

SessionType Session::type() const { // ERROR!!

Session::SessionType Session::type() const {

答案 1 :(得分:4)

问题是,当你在Session.cpp中定义函数时,在评估返回类型时,编译器还不太清楚它是类的成员函数,而不是有范围的枚举。它与函数的从左到右的定义有关。试试这个

Session::SessionType Session::type() const { // ERROR!!
    return type_;
}

注意,另一种情况是有效的,因为在评估函数名称之前它不会遇到枚举,因此在范围内有枚举。

此外,您得到的错误是由于类定义结束时缺少分号。

答案 2 :(得分:3)

您忘了关闭课程声明:

class Session {

public:

    enum SessionType {
        FreeStyle,
        TypeIn,
        MCQ
    };

    explicit Session();
    SessionType type() const;
    void setType(SessionType v);

private:

    SessionType type_;

}; // <- semicolon here

您需要在课堂外限定enum名称:

Session::SessionType