【问题标题】:Function pointer to non-static function指向非静态函数的函数指针
【发布时间】:2013-11-01 14:28:59
【问题描述】:

我正在尝试创建一个函数指针数组,以减轻一些否则会是噩梦的代码。我想使用一组函数,如下面的函数。

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

如果我将函数定义为静态,它会起作用,但我不能真正这样做,因为它会对我的设计产生太大影响。我该如何解决这个问题?

【问题讨论】:

    标签: c++ arrays function-pointers


    【解决方案1】:

    感谢 SO 显示在右侧的建议,我找到了答案。

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

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

    注意之前丢失的 Grid::

    【讨论】:

    • 那太好了。请记住,“指示类”不仅仅是一种修饰语法。这样的指针是与普通函数指针完全不同的野兽。两者不可互换且不兼容。希望您不需要它们。
    • 你是对的。我已经编辑了答案以使其更具信息性。
    猜你喜欢
    • 2021-01-24
    • 2011-11-21
    • 2020-12-11
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2017-03-11
    相关资源
    最近更新 更多