Ejemplo:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
Me sale el siguiente error cuando compilo esto:
<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);
^~~
Creo que la variable ( clr
) a la que paso func(unsigned int&)
es un valor l. Puedo obtener la dirección de clr
y puedo asignarle otro valor. ¿Por qué se convierte en un valor r cuando trato de pasarlo func(unsigned int&)
?
enum
aunsigned int
?typedef enum
no es un tipo nativo, y C ++ lo trataría como ununsigned int
tipo de hecho.clr
.enum type
es tratar comounsigned int
en C ++.enum X
es su propio tipo, distinto deint
Respuestas:
clr
en sí es un valor de tipoColor
. Pero la función no acepta aColor
. Acepta una (referencia a)unsigned int
. Entonces, el argumento se convierte (implícitamente). Y el resultado de la conversión es un valor de tipounsigned int
.fuente
func(Color&)
antes de hacer la pregunta, y compila el pase. Solo pensé que C ++ trataría elenum
tipo comounsigned int
tipo en la compilación. Gracias por tu respuesta.el tipo de enumeración init y la asignación deben ser enumeración dentro, por lo que el tipo de enumeración no es lvalue。 void func (unsigned int & num) esta función necesita un tipo de comillas
fuente
func(unsigned int&)
afunc(Color&)
, el compilador lo acepta. Entonces, creo que la variable de tipo enum es un lvalue.func(Color&)
y pasa.