我在check.cpp中使用枚举返回类型声明了一个函数。但是它给出了如下错误。
我的程序如下。任何人都可以给我一个解决方案。
check.cpp
#include <iostream>
#include "check.h"
using namespace std;
check::check() { }
TStatus check::getStatus()
{
......
}
check::~check() { }
check.h
#ifndef CHECK_H_
#define CHECK_H_
class check {
private:
enum TStatus { ok,sold,defect };
public:
check();
~check();
TStatus getStatus();
};
#endif /* CHECK_H_ */
答案 0 :(得分:2)
首先,你只需要写
vs_community.exe /uninstall /force
因为否则编译器不知道check::TStatus check::getStatus()
^^^^^^^
来自哪里。
请在此处查看完整的可编辑代码:http://ideone.com/l5qxbK
但请注意另一个问题。您的TStatus
是getStatus()
函数,因此您可能希望从类外部调用它。但是您将无法执行此操作,因为返回类型为public
,因此无法在类之外使用(下面的条形注释)。因此,您需要制作枚举private
,或者如果不在课堂外使用,则可以将public
设为私有。
注意:如果您不使用getStatus()
结果,即使您的getStatus()
是私有的,您实际上可以在课堂外使用TStatus
;看看上面链接的我的ideone代码。虽然在合理的设计中,这种呼叫应该没有多大意义。
另外,请参阅Vlad关于如何使用getStatus()
实际存储auto
结果的答案,即使getStatus()
是私有的。虽然更好的是让TStatus
公开。
答案 1 :(得分:2)
您必须在名称TStatus
check::TStatus check::getStatus()
//...
这是一个示范程序
#include <iostream>
class check {
private:
enum TStatus { ok, sold, defect };
public:
check() = default;
~check() = default;
TStatus getStatus() const;
};
check::TStatus check::getStatus() const { return defect; }
int main()
{
auto status = check().getStatus();
std::cout << status << std::endl;
}
程序输出
2
答案 2 :(得分:1)
您必须按如下方式更改您的功能定义:
check::TStatus check::getStatus()
{
return sold;
}