check.cpp 文件无法识别在 check.h 文件中声明的枚举 TStatus
Posted
技术标签:
【中文标题】check.cpp 文件无法识别在 check.h 文件中声明的枚举 TStatus【英文标题】:check.cpp file can not recognise enum TStatus, declared in check.h file 【发布时间】:2015-06-19 10:58:46 【问题描述】:我在 check.h 文件中将枚举文件声明为我的类的公共成员,但问题出在 check.cpp 文件中,我使用了返回类型为枚举的函数 TStatus check::getStatus()。无法解析 TStatus。
通过将 enum 声明为全局变量来解决问题,并在 check.cpp 和 check.h 文件中解决问题。
现在我使用了一个函数,该函数需要使用枚举中的值检查 TStatus check::getStatus() 的返回值。
这个新函数无法识别枚举,因为它不是类的成员。
我的代码如下。请任何人告诉我是否可以将枚举声明为类成员,并且可以通过 check.cpp 文件识别。或者有其他方法可以解决问题。
这是 CHECK.CPP 文件
#include <iostream>
#include "check.h"
using namespace std;
check::check()
TStatus check::getStatus()
return ok;
void check::print()
check object;
if(object.getStatus() == TStatus::ok) cout<<"ok"<<endl;
if(object.getStatus() == TStatus::sold) cout<<"sold"<<endl;
if(object.getStatus() == defect) cout<<"defect"<<endl;
check::~check()
这是 CHECK.H 文件
#ifndef CHECK_H_
#define CHECK_H_
class check
private:
enum TStatus ok,sold,defect ;
public:
check();
~check();
TStatus getStatus();
void print();
;
#endif /* CHECK_H_ */
【问题讨论】:
你没有在你的类中声明枚举,为什么要使用check::
来访问它们?
【参考方案1】:
您在全局范围内声明了您的 enum TStatus
。您无法通过check::ok
访问它。它必须在你的类中声明。
一种访问方式是if (object.getStatus() == ok)
,另一种是if (object.getStatus() == TStatus::ok)
C++11 enum class
。
最好将它移到你的班级中,因为 ok
可能会在其他地方有所不同。
【讨论】:
非常感谢,当我输入 if (object.getStatus() == ok) 时,它没有显示任何错误。但是,如果我输入 if(object.getStatus() == TStatus::ok) 它会显示此错误。 -->>‘TStatus’不是类或命名空间 我想把它移到里面,但是如果我这样做了,我会得到这个错误。这一行有多个标记 - 'TStatus' 没有命名一个类型 - 类型'TStatus' 无法解析 -未找到成员声明 - 没有返回,在返回非 void 的函数中 @rashedazad 你能用新的类定义更新你的问题吗? @Blacktempel 嗨,我用枚举作为私有类成员更新了这个问题。并且错误是此行的多个标记-“TStatus”没有命名类型-无法解析类型“TStatus”-找不到成员声明-没有返回,在函数中返回非 void @rashedazadcheck::TStatus check::getStatus()
以上是关于check.cpp 文件无法识别在 check.h 文件中声明的枚举 TStatus的主要内容,如果未能解决你的问题,请参考以下文章