您好,
我的项目结构如下:
\- 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 ()’
有什么提示吗?