【发布时间】:2011-02-11 08:24:57
【问题描述】:
您好,
我的项目结构如下:
\- base (C static library)
callbacks.h
callbacks.c
paint_node.c
.
.
* libBase.a
\-app (C++ application)
main.cpp
在 C 库 'base' 中,我已将 global-function-pointer 声明为:
在单头文件中
回调.h
#ifndef CALLBACKS_H_
#define CALLBACKS_H_
extern void (*putPixelCallBack)();
extern void (*putImageCallBack)();
#endif /* CALLBACKS_H_ */
在单个 C 文件中,它们被初始化为
回调.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 ()()'
有什么建议吗?
【问题讨论】:
标签: c++ c pointers global-variables function-pointers