Пример:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
Я получаю следующую ошибку при компиляции:
<source>: In function 'int main()':
<source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type 'unsigned int'
func(clr);
^~~
Я думаю, что переменная ( clr), которую я передаю, func(unsigned int&)является lvalue. Я могу получить адрес clrи могу присвоить ему другое значение. Почему оно превращается в значение, когда я пытаюсь передать его func(unsigned int&)?
@ NathanOliver-ReinstateMonica По моему первоначальному мнению, я
—
Коэн
typedef enumне являюсь нативным типом, и C ++ будет рассматривать его как unsigned intтип действительно.
В этом случае сообщение об ошибке GCC является неоптимальным. Clang даст менее запутанное сообщение, напечатав оригинальный тип
—
cpplearner
clr.
@cpplearner Да, именно поэтому я подумал,
—
Коен
enum typeчто рассматривать как unsigned intв C ++.
enum Xэто его собственный тип, отличный отint
enumэтоunsigned int?