如何在 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::
}
我正在尝试用 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::
}