如何使用默认值将值分配给构造函数中的枚举?

时间:2020-06-14 10:53:26

标签: c++ enums constructor

我在C ++中有一个具有受保护的枚举类型的类,并且在使用用户定义的参数在构造函数中初始化该值时遇到麻烦,该参数也具有默认值。

代码:

class Student
{
protected:
  double gpa;
  enum gradeStatus {freshman, sophomore, junior, senior, blank};
public:
  Student(double inGPA = 0.0, gradeStatus inGrade = blank)
  :
  gpa(inGPA),
  gradeStatus(inGrade) //problem here
  {}
}; 

由于语句gradeStatus(inGrade),我收到了编译器错误:

错误(处于活动状态)E0292“ gradeStatus”不是类“学生”的非静态数据成员或基类

如果要创建blank对象而不提供Student值,我希望emum具有默认值gradeStatus,如果这样做,那么我想初始化{{ 1}}对象以及用户提供的参数。

任何有关我如何做到这一点的帮助。

2 个答案:

答案 0 :(得分:3)

gradeStatus是枚举类型的名称,但不是数据成员的名称。错误消息试图告诉您应该初始化数据成员,而不是枚举类型。

您可能想要

class Student
{
protected:
  double gpa;
  enum gradeStatus {freshman, sophomore, junior, senior, blank}; // enum type definition
  gradeStatus status;                                            // data member definition
public:
  Student(double inGPA = 0.0, gradeStatus inGrade = blank)
  :
  gpa(inGPA),
  status(inGrade) // initialize the data member
  {}
}; 

答案 1 :(得分:0)

gradeStatus(inGrade)

此行尝试将inGrade分配给gradeStatus。 “ gradeStatus”是一个枚举类型,不是类的成员。要解决此问题,请向您的班级添加一个成员,例如:

gradeStatus status;

然后将有问题的行更改为:

status(inGrade)