如何设置枚举类型变量的默认值?

How to set the default value of enum type variable?

如何设置枚举类型提示的默认值,我尝试将其设置为 0 或 1,或者什么都不设置,但我得到同样的错误?

enum tip {
pop,
rap,
rock
};

class Pesna{
private:
char *ime;
int vremetraenje;
tip tip1;

public:
//constructor
Pesna(char *i = "NULL", int min = 0, tip t){
    ime = new char[strlen(i) + 1];
    strcpy(ime, i);
    vremetraenje = min;
    tip1 = t;
}

};

您必须将其设置为 enum 值之一,例如:

Pesna(char *i = "NULL", int min = 0, tip t = pop)
                                        // ^^^^^

另一种技术是使用 enum 本身声明的 Default 值并使用该值。如果您以后改变主意,默认值应该是什么,这会更容易:

enum tip {
    pop,
    rap,
    rock,
    Default = rap, // Take care not to use default, that's a keyword
};

Pesna(char *i = "NULL", int min = 0, tip t = Default)
                                        // ^^^^^^^^^

不要将枚举视为 0 或 1 之类的数字(在某些情况下,它们甚至可以是有符号或无符号的)。在您引用它们的方式中,将它们更像是 class/struct。所以使用

tip = 1

不会成功,因为“小费”不是数字,而是它自己的实体。没有明确说明枚举从其他地方开始,比如

enum tip { pop = 7, ...}

第一个枚举将从 0 开始。因此您可以 cast/uncast 使用那些带有“数字”的表示,但我还是要小心。通常,在 class 的 public 命名空间中声明 class 特定的枚举会更好,例如

class Pesna {
  public:
    enum tip { pop, ...}

然后使用范围解析运算符访问它们

Pesna::tip