C++ 如何在c+中实例化带有枚举参数的对象+;?
我试图用3个参数实例化一个对象“Bug”,其中一个是枚举器。这是我的班级: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),
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)
{}
无效打印详细信息()
{
coutTryBug::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::
}