Код
error: #119: cast to type "struct led_class" is not allowed
struct led_class* self = (struct led_class) malloc(sizeof(led_class));
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);
}
{
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;
}
{
led_class* self = malloc(sizeof(led_class));
self->gpio = GPIO;
self->pin = pin;
led_init(self);
return self;
}