【问题标题】:Enum return type not working C [Error C2440]枚举返回类型不起作用 C [错误 C2440]
【发布时间】:2013-02-01 04:50:26
【问题描述】:

考虑以下几点:

class Specimen
{
public:
enum Gender getGender();
private:
enum Gender { MALE=1, FEMALE=2, ALIEN=3, HYBRID=4};
}

这部分也是:

Gender gender;

在私有下

enum Gender Specimen::getGender()
{
    return gender;
}

这是一个成员函数 编译器说 “错误 C2440: 'return': 无法从 'Specimen::gender' 转换为 'Gender' 我还尝试从函数 def 和函数原型中删除“枚举”

我不确定我需要解决什么问题

【问题讨论】:

    标签: c++ enums return


    【解决方案1】:

    Specimen 不在范围内,因此您必须对其进行限定:

    enum Specimen::Gender Specimen::getGender()
    {
        return gender;
    }
    

    这也适用于 C++11:

    auto Specimen::getGender() -> Gender
    {
        return gender;
    }
    

    【讨论】:

    • 函数原型是否保持不变?
    • @MuadDib42 是的。 Gender 在类体内使用时在范围内。
    【解决方案2】:

    目前尚不清楚gendergetGender() 是如何以及在何处声明/定义的,但编译如下:

    class Specimen
    {
    public:
        enum Gender { MALE=1, FEMALE=2, ALIEN=3, HYBRID=4};
        Gender getGender();
    private:
        Gender gender;
    };
    
    Specimen::Gender Specimen::getGender()
    {
        return gender;
    }
    
    int main() {}
    

    看到它工作here

    请注意,enum Gender 已移至 getGender() 声明上方,GendergetGender() 定义中被限定为 Specimen::Gender

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 2021-11-25
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多