2013-11-01 90 views
0

我正在试图制作一个函数指针数组来缓解一些否则会是噩梦的代码。我想使用一组函数,如下所示。函数指针指向非静态函数

void drawNothing(Point2, Point2, Point2, Point2); 

我已经定义了函数指针的类型。

typedef void(*FunctionPointer)(Point2, Point2, Point2, Point2); 

和一个数组来存储指针本身。

FunctionPointer drawMSCase[16]; 

的问题是,当我尝试将功能分配给一个插槽,像这样

drawMSCase[0] = &Grid::drawNothing; 

我收到以下错误

error: cannot convert 'void (Grid::*)(Point2, Point2, Point2, Point2)' to 'Grid::FunctionPointer {aka void (*)(Point2, Point2, Point2, Point2)}' in assignment 

它的工作原理,如果我定义功能是静态的,但我不能这么做,因为它会对我的设计产生太大的影响。我该如何解决这个问题?

回答

0

我已经找到了答案,这要归功于我们在右边显示的建议。

鉴于我想使用指向类Grid的成员函数的指针,我必须在typedef声明中指定它。

typedef void(Grid::*FunctionPointer)(Point2, Point2, Point2, Point2); 

通知的网::这是前失踪。

+3

这很棒。请记住,“表明课程”不仅仅是一种美容语法。这种指针是一种与普通函数指针完全不同的野兽。这两者不可互换,也不兼容。希望你不需要他们。 – AnT

+0

你说得对。我编辑了答案,使其更具信息性。 – broncoAbierto