Переписываю С программу на С++, уже вроде всё переделал кроме одного места.
На С была структура регистрации прерываний для процессора 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 делал, никак не получается!
Помогите кто может! Как преобразовать вызов функции?