Переписываю С программу на С++, уже вроде всё переделал кроме одного места.
На С была структура регистрации прерываний для процессора NIos II от Альтеры (используется GCC):
alt_avalon_sgdma_register_callback( sgdma_rx_dev, (alt_avalon_sgdma_callback )&tse_sgdmaRx_isr, // <- ругается (alt_u16)ALTERA_TSE_SGDMA_INTR_MASK, sgdma_rx_dev );
где тип alt_avalon_sgdma_callback объявлен так: typedef void (*alt_avalon_sgdma_callback)(void *context)
tse_sgdmaRx_isr - непосредственно подпрограмма обработчик прерывания.
На С была объявлена как: int tse_sgdmaRx_isr(void * context, alt_u32 irqnum);
Всё компилировалось и собиралось.
Теперь сделал класс и в нём объявил функцию обработчик: class eth_dev : public eth_cfg { protected: ... public: eth_dev(const uint8_t); int32_t tse_sgdmaRx_isr(void *context, uint32_t irqnum); ... };
Компилирую и получаю такую вот ошибку:
converting from `int32_t (eth_dev::*)(void*, uint32_t)' to `void (*)(void*)'
Понимаю что каким-то образом надо преобразовать тип, но вот как? Уже и через this делал, никак не получается!
Помогите кто может! Как преобразовать вызов функции?
|