Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil cast to struct
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > Keil
spectr
Компилятор выдает ошибку:
Код
error:  #119: cast to type "struct led_class" is not allowed
      struct led_class* self = (struct led_class) malloc(sizeof(led_class));


Почему кейл не умеет в приведение к структуре? И как это починить?

Код:
Код
typedef struct led_class
{
    uint8_t pin;
    GPIO_TypeDef* gpio;
} led_class;

struct led_class* led_create(GPIO_TypeDef* GPIO, uint8_t pin)
{
    struct led_class* self = (struct led_class) malloc(sizeof(led_class));
    self->gpio = GPIO;
    self->pin = pin;
    led_init(self);
    return self;
}

void led_init(led_class* self)
{
    self->gpio->MODER |= 1 << (self->pin * 2);
    self->gpio->ODR = 0 << self->pin;
}

void led_on(led_class* self)
{
    self->gpio->ODR = 1 << self->pin;
}

int main(void)
{
    led_class* led = led_create(GPIOD, 2);
    led_on(led);
}


*пробовал включать --c99 - не помогает.
* пробовал включать --strict - вылазит куча ошибок из system_stm32f4xx.c



UPD:
Если переписать конструктор вот так (без приведения), то работает:
Код
struct led_class* led_create(GPIO_TypeDef* GPIO, uint8_t pin)
{
    led_class* self = malloc(sizeof(led_class));
    self->gpio = GPIO;
    self->pin = pin;
    led_init(self);
    return self;
}
Valentine Loginov
А вы разве не приводите указатель к структуре, вместо указателя на структуру?
Можно еще -Wextra -Wall какие-нибудь попробовать sm.gif
Kabdim
Зачем вообще приведения нужны? void* специально сделан для того что бы они не требовались.
spectr
Спасибо за советы, буду ботать дальше ))
Сергей Борщ
Вы забыли одну звездочку. Кейл ругается правильно:
struct led_class* self = (struct led_class *) malloc(sizeof(led_class));

А в целом - вы создали вручную классический C++ класс. Переходите на плюсы, там все это пишется гораздо проще и даст точно такой же выходной код.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.