Pregunta

Esto puede parecer una pregunta simple, pero obtengo un error al compilar esto. Quiero poder pasar una enumeración a un método en C.

Enumeración

enum TYPES { PHOTON, NEUTRINO, QUARK, PROTON, ELECTRON };

Llamando al método

makeParticle(PHOTON, 0.3f, 0.09f, location, colour);

Método

struct Particle makeParticle(enum TYPES type, float radius, float speed, struct Vector3 location, struct Vector3 colour)
{
    struct Particle p;
    p.type = type;
    p.radius = radius;
    p.speed = speed;
    p.location = location;
    p.colour = colour;

    return p;
}

El error que obtengo es cuando llamo al método:

  

tipos incompatibles en la asignación

¿Fue útil?

Solución

Se compila bien para mí, en este ejemplo reducido:

enum TYPES { PHOTON, NEUTRINO, QUARK, PROTON, ELECTRON };

void makeParticle(enum TYPES type)
{
}

int main(void)
{
    makeParticle(PHOTON);
}

¿Está seguro de haber hecho que la declaración de TYPES esté disponible para el código tanto en la definición de makeParticle como en la llamada? No funcionará si haces esto:

int main(void)
{
    makeParticle(PHOTON);
}

enum TYPES { PHOTON, NEUTRINO, QUARK, PROTON, ELECTRON };

void makeParticle(enum TYPES type)
{
}

porque el código main () aún no ha visto TIPOS.

Otros consejos

Intenta cambiar

p.type = type;

a

p.type = (int)type;

Si esto no ayuda, agregue el archivo .c completo, incluida la definición de struct Particle a su pregunta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top