如何在 C++ 中使用枚举参数实例化对象?

How to instantiate an object witn an enum parameter in c++?

我正在尝试用 3 个参数实例化一个对象 'Bug bug',其中一个是枚举器。这是我的 class:

 class Bug 
{
private:
    int Id;
    string description;
    enum severity { low, medium, severe} s;

public:
    Bug(void);
     Bug(int id, string descr, severity x)
              :Id(id), description(descr), s(x)
     {}

    void printDetails()
    {
       cout<< "Severity level:" <<s<< " Description: " <<description<<" ID= " 
       <<Id<< endl;
    }
   ~Bug(void);

};

这是我的 main.cpp:

    #include "Bug.h"
    int main(){

    Bug bg(3,"a", low);//Error message: identifier "low" is undefined

     return 0;
    }

当我将此行添加到主

    enum severity { low, medium, severe};

错误消息已更改为:

      Bug bg(3,"a", low);//Error message: no instance of constructor "Bug::bug" matches the argument list

知道如何正确执行此操作吗?

将枚举移动到 public 区域并尝试使用:

Bug bg(3,"a", Bug::severity::low);

您的枚举存在于 Bug class 中,而您的主要功能在 class 之外。这是必须的。

因此从主函数引用枚举的正确方法是:

Bug bg(3,"a", Bug::low);

但是,您需要在 class 的 public 部分定义枚举。它目前位于 private 部分,这将阻止 main 函数访问它。

请注意,您还需要将枚举定义为 class 中的一种类型,与使用它的私有成员变量分开。所以你的 class 定义应该变成这样:

class Bug 
{
public:
    typedef enum {low, medium, severe} severity;
    Bug(void);
     Bug(int id, string descr, severity x)
              :Id(id), description(descr), s(x)
     {}

    void printDetails()
    {
       cout<< "Severity level:" <<s<< " Description: " <<description<<" ID= " 
       <<Id<< endl;
    }
   ~Bug(void);

private:
    int Id;
    string description;
    severity s;
};

请注意,public 部分需要在此 class 中的 private 部分之上,以便在使用枚举类型严重性之前对其进行定义。

修复如下,见我的评论


class Bug 
{


public:
    // If you intent to use severity outside class , better make it public
    enum severity { low, medium, severe} ;

    Bug(void);
     Bug(int id, string descr, severity x)
              :Id(id), description(descr), s(x)
     {}

    void printDetails()
    {
       cout<< "Severity level:" <<s<< " Description: " <<description<<" ID= " 
       <<Id<< endl;
    }

   ~Bug()
   {
       // Fix your constructor, they don't have void parameter and must have a body
   }

   // Moving private section, just to use the severity declaration in public section
private:
    int Id;
    string description;
    severity s ;    // use an instance of severity for internal use
};

int main()
{
    Bug bg(3,"a", Bug::low); // now use severity values using Bug::


}