class sys { public: sys () ; ... private: void* ( *pf[16] ) ( void* ) ; void* rLongitude ( void* ) ; void* rAltitude ( void* ) ; ... }; sys::sys() { pf[0] = rLongitude ; // возвращяет: E2235 Member function must be called or its pf[1] = rAltitude ; // address taken ... } void* sys::rLongitude ( void* stk ) { ... } Без класса всё работает - кто знает подскажите в чём загвоздка ( заранее сенькью )
Тип указателя на функцию в данном случае - "указатель на мембер класса", а не просто указатель на функцию. Вот так нужно: Код (Text): class sys { public: sys () ; ... private: void* ( sys::*pf[16] ) ( void* ) ; //Важно! void* rLongitude ( void* ) ; void* rAltitude ( void* ) ; ... }; sys::sys() { pf[0] = &sys::rLongitude ; // Все отлично компилирует:) pf[1] = &sys::rAltitude ; ... } void* sys::rLongitude ( void* stk ) { ... }
Взять адрес функции/элемента в структуре/классе не так просто выход: 1. сделать их static 2. обьявить из для каждой из функции/элемента указатель типа void*(*sys::function)(void) и потом над ним делать разименование и записывать в массив.
За оказание помощи , всем братьям по разуму - Спасибо . Работающий вариант : Код (Text): class sys { public: sys () ; void* (*sys::pf[16]) ( void* ) ; private: static void* sys::func ( void* ) ; ... }; sys::sys() { pf[0] = &sys::func ; } void* sys::func ( void* stk ) { ... }
TheRawGod "указатель на мембер класс" - ? если возможно подробнее ( об'ясни или указатель где есть понимание )