我在构造函数中使用什么类型来初始化由无名枚举定义的成员变量?
What type do I use in the constructor to initialize a member variable defined by a nameless enum?
我有一个包含成员变量 category
的结构,我猜它是“无名枚举”类型。
struct Token {
Token();
enum {
NUMBER, VARIABLE, PLUS, MINUS, PRODUCT, DIVISION, POWER, SIN, COS
} category;
union {
char variable;
double number;
};
};
如您所见,我还有一个构造函数Token()
。我希望能够像这样使用构造函数:
Token my_token(Token::NUMBER, 5);
而不是做这样的事情:
Token my_token;
my_token.category = Token::NUMBER;
my_token.number = 5;
我现在的问题是,构造函数使用什么类型?我试过这样的事情:
//declaration
Token(int category, int number);
//definition
Token(int category, int number) : category(category), number(number) {}
但是当我尝试初始化 Token 结构的对象时,我得到:
error: invalid conversion from ‘int’ to ‘Token::<unnamed enum>’ [-fpermissive]
我想将枚举保留在结构中,如果能提供一些关于使用什么类型来初始化联合的帮助,我们将不胜感激。
是这样的吗?
struct Token {
enum EN {
NUMBER, VARIABLE, PLUS, MINUS, PRODUCT, DIVISION, POWER, SIN, COS
} category;
union {
char variable;
double number;
};
Token(const EN c, const double n) noexcept : category(c), number(n) {}
//... Other constructors...
};
int main()
{
Token t(Token::NUMBER, 3.4);
}
但我会在内部分配类别
我有一个包含成员变量 category
的结构,我猜它是“无名枚举”类型。
struct Token {
Token();
enum {
NUMBER, VARIABLE, PLUS, MINUS, PRODUCT, DIVISION, POWER, SIN, COS
} category;
union {
char variable;
double number;
};
};
如您所见,我还有一个构造函数Token()
。我希望能够像这样使用构造函数:
Token my_token(Token::NUMBER, 5);
而不是做这样的事情:
Token my_token;
my_token.category = Token::NUMBER;
my_token.number = 5;
我现在的问题是,构造函数使用什么类型?我试过这样的事情:
//declaration
Token(int category, int number);
//definition
Token(int category, int number) : category(category), number(number) {}
但是当我尝试初始化 Token 结构的对象时,我得到:
error: invalid conversion from ‘int’ to ‘Token::<unnamed enum>’ [-fpermissive]
我想将枚举保留在结构中,如果能提供一些关于使用什么类型来初始化联合的帮助,我们将不胜感激。
是这样的吗?
struct Token {
enum EN {
NUMBER, VARIABLE, PLUS, MINUS, PRODUCT, DIVISION, POWER, SIN, COS
} category;
union {
char variable;
double number;
};
Token(const EN c, const double n) noexcept : category(c), number(n) {}
//... Other constructors...
};
int main()
{
Token t(Token::NUMBER, 3.4);
}
但我会在内部分配类别