прохождение перечисления в C - PullRequest
0 голосов
/ 01 мая 2009

Это может показаться простым вопросом, но я получаю сообщение об ошибке при компиляции. Я хочу быть в состоянии передать перечисление в метод в C.

Enum

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

Вызов метода

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

Метод

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;
}

Ошибка, возникающая при вызове метода:

несовместимые типы в присвоении

Ответы [ 2 ]

5 голосов
/ 01 мая 2009

Это хорошо для меня, в этом урезанном примере:

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

void makeParticle(enum TYPES type)
{
}

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

Вы уверены, что сделали код TYPES доступным для кода как в определении makeParticle, так и в вызове? Это не сработает, если вы сделаете это:

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

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

void makeParticle(enum TYPES type)
{
}

потому что код main() еще не видел ТИПОВ.

0 голосов
/ 01 мая 2009

Попробуйте изменить

p.type = type;

до

p.type = (int)type;

Если это не поможет, добавьте к вашему вопросу весь файл .c, включая определение struct Particle.

...