Вопрос

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

Перечисление

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

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

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

Это было полезно?

Решение

У меня он компилируется нормально, в этом урезанном примере:

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() код еще не видел ТИПЫ.

Другие советы

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

p.type = type;

к

p.type = (int)type;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top