枚举返回类型的函数无法在C ++类中解析

时间:2015-06-19 12:34:19

标签: c++ class enums

  1. 我的check.h文件有一个枚举作为私有变量。我不知道如何将枚举声明为全局实体。
  2. 我在check.cpp中使用枚举返回类型声明了一个函数。但是它给出了如下错误。

    • 此行的多个标记
    • 无法解析类型'TStatus'
    • 'TStatus'未命名类型
    • 未找到会员声明
  3. 我的程序如下。任何人都可以给我一个解决方案。

    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_ */
    

3 个答案:

答案 0 :(得分:2)

首先,你只需要写

vs_community.exe /uninstall /force

因为否则编译器不知道check::TStatus check::getStatus() ^^^^^^^ 来自哪里。

请在此处查看完整的可编辑代码:http://ideone.com/l5qxbK

但请注意另一个问题。您的TStatusgetStatus()函数,因此您可能希望从类外部调用它。但是您将无法执行此操作,因为返回类型为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;
    }

演示:http://coliru.stacked-crooked.com/a/0ca5333f3674d39b