Привет,
Моя структура проекта выглядит следующим образом:
\- base (C static library)
callbacks.h
callbacks.c
paint_node.c
.
.
* libBase.a
\-app (C++ application)
main.cpp
В библиотеке C 'base' я объявил указатель глобальной функции как:
в файле с одним заголовком
callbacks.h
#ifndef CALLBACKS_H_
#define CALLBACKS_H_
extern void (*putPixelCallBack)();
extern void (*putImageCallBack)();
#endif /* CALLBACKS_H_ */
в одном файле C они инициализируются как
callbacks.c
#include "callbacks.h"
void (*putPixelCallBack)();
void (*putImageCallBack)();
Другие C-файлы получают доступ к этим функциям обратного вызова:
paint_node.c
#include "callbacks.h"
void paint_node(node *node,int index){
//Call callbackfunction
.
.
putPixelCallBack(node->x,node->y,index);
}
Я компилирую эти файлы C и генерирую статическую библиотеку 'libBase.a'
Затем в приложении C ++,
Я хочу назначить метод экземпляра C ++ этому глобальному указателю на функцию:
Я сделал что-то вроде следующего:
в файле Sacm.cpp
#include "Sacm.h"
extern void (*putPixelCallBack)();
extern void (*putImageCallBack)();
void Sacm::doDetection()
{
putPixelCallBack=(void(*)())&paintPixel;
//call somefunctions in 'libBase' C library
}
void Sacm::paintPixel(int x,int y,int index)
{
qpainter.begin(this);
qpainter.drawPoint(x,y);
qpainter.end();
}
Но при компиляции выдает ошибку:
sacmtest.cpp: в функции-члене void
SACM :: doDetection ()»:
sacmtest.cpp: 113: ошибка: ISO C ++
запрещает брать адрес
неквалифицированный или заключенный в скобки
нестатическая функция-член для формирования
указатель на функцию-член. Сказать
‘& Sacm :: paintPixel’ sacmtest.cpp: 113:
ошибка: преобразование из ‘void
(Sacm :: ) (int, int, int) ’void
() ()»
Есть советы?