我对我现在遇到的错误感到困惑。我班上有一个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;
}
答案 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