【问题标题】:Error using "enum" within a class在类中使用“枚举”时出错
【发布时间】:2018-09-10 23:15:53
【问题描述】:

我收到以下关于我的枚举的错误消息,但我不知道为什么。 我只有 1 个头文件和 1 个源文件,我在其中实现了所有功能(和主要功能)。我在“公共”中声明了“幸存者”类中的枚举。我没有忘记在源文件中包含头文件。请帮我看看我做错了什么。

“错误:‘e_status’没有命名类型”

这是我的头文件:

class Survivor
{
public:
    enum e_status {SINGLE, MARRIED, RELATIONSHIP};

    char* get_name();
    int get_age();
    e_status get_status();

    void set_name(char n[]);
    void set_age (int a);
    void set_status (e_status s);

    const void print();

private:

    char name [20];
    int age;
    e_status status;
};

这是我的源文件中的相关部分:

e_status Survivor::get_status()
{
    return status;
}

【问题讨论】:

  • 提示:你在类定义中声明了枚举。

标签: c++ class c++11 scope declaration


【解决方案1】:

您必须使用限定名称

Survivor::e_status Survivor::get_status()
{
    //...
}

e_status 类型是 Survivor 类的成员。

在类范围内不搜索成员函数的返回类型,而在类范围内使用例如参数类型。

考虑以下两个函数定义。

#include <iostream>

class Survivor
{
public:
    enum e_status {SINGLE, MARRIED, RELATIONSHIP};

    e_status get_status();
    void set_status (e_status s);
    //...
private:
    e_status status;
};

Survivor::e_status Survivor::get_status()
{
    return status;
}

void Survivor::set_status (e_status s)
{
    status = s;
}

int main() 
{
    return 0;
}

【讨论】:

  • 也可以:auto Survivor::get_status() -&gt; e_status。如果您想不惜一切代价避免使用限定名称,或者只是为了说明,这很有用。
  • @anatolyg 在这种情况下,函数必须在类定义中以相同的方式声明。考虑到尾随返回类型说明符是多余的。
【解决方案2】:

你试图在课堂外引用;这样做:

 Survivor::e_status Survivor::get_status()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多