C++ 如何在c+中实例化带有枚举参数的对象+;?

C++ 如何在c+中实例化带有枚举参数的对象+;?,c++,visual-studio-2010,oop,C++,Visual Studio 2010,Oop,我试图用3个参数实例化一个对象“Bug”,其中一个是枚举器。这是我的班级: 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),

我试图用3个参数实例化一个对象“Bug”,其中一个是枚举器。这是我的班级:

 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);
当我把这一行添加到主

    enum severity { low, medium, severe};
错误消息已更改为:

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

有没有办法做到这一点?

将enum移动到公共区域,并尝试使用:

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

枚举存在于
Bug
类中,而主函数则存在于该类之外。这是必须的

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

缺陷背景(3,“a”,缺陷::低)

但是,您需要在类的
public
部分中定义枚举。它当前位于
private
部分,这将阻止主功能访问它

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

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;
};
类错误
{
公众:
typedef枚举{低、中、严重}严重性;
错误(无效);
错误(整数id、字符串描述、严重性x)
:Id(Id)、描述(descr)、s(x)
{}
无效打印详细信息()
{
cout修复如下,请参见我的评论


类错误
{
公众:
//如果您打算在类外使用严重性,最好将其公开
枚举严重性{低、中、严重};
错误(无效);
错误(整数id、字符串描述、严重性x)
:Id(Id)、描述(descr)、s(x)
{}
无效打印详细信息()
{

coutTry
Bug::low
Bug::severity::low
。将枚举定义移动到公共部分。main()无法看到它,因为它是女贞子。您需要将它从私有部分移动到公共部分。我将枚举严重性移动到公共部分,并在main中使用它:Bug bg(3,“a”,Bug::low);成功了,谢谢!enum是私有的,而且不是类,它不保留名称“severity”,名称空间不存在。@Art您的代码还有其他问题。请参阅我的答案。
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;
};
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::


}