【问题标题】:call a pointer function in class在类中调用指针函数
【发布时间】:2011-07-27 13:43:52
【问题描述】:

我在一个类中有一个指针函数,它在类外定义并用作回调。

课程是这样的

class A
{
    void CreateGrid(OWindow *win,int x,int y);
    Otkobject *GetIcon(void *data,Otkobject *obj,int x)
}

我已经像这样定义了GetIcon 函数

Otkobject *A::GetIcon(oid *data,Otkobject *obj,int x){
    //statements
}

为此,我遇到了错误。

然后我尝试了

Otkobject A::*GetIcon(void *data,Otkobject *obj,int x){
    //statements
}

我正在获取函数名称并使用回调。这个函数指针怎么用?

【问题讨论】:

  • 你能告诉我们你遇到了什么错误吗?
  • 两件事 - Otkobject 的声明是什么,您的定义中的 oid 以及您的问题或代码中的类拼写错误中缺少的分号?
  • class A 的定义末尾添加一个分号。您第一次尝试定义 GetIcon 是正确的,只是您需要删除分号并添加函数体。
  • 参数类型 Otkobject* (A::)(void data,Otkobject *obj,int x ) 与 Otkobject 不匹配 (*)(void *data,Otkobject * obj,int x)
  • 另外,你说的是“函数指针”还是返回指针的函数?

标签: c++ function pointers


【解决方案1】:

这是一个返回指针的函数,而不是函数指针。错误可能是类声明后缺少分号:

class A
{
    void CreateGrid(OWindow *win,int x,int y);
    Otkobject *GetIcon(void *data,Otkobject *obj,int x); // <- also here
}; // <- notice semicolon

【讨论】:

    【解决方案2】:

    你应该 typedef 函数。类似:
    typedef Otkobject *function_type(void *data,Otkobject *obj,int x);

    然后你可以在任何你想要的地方使用函数指针

    【讨论】:

    • 你能解释一下吗?
    • 错误答案。这是一个成员函数,而不是全局函数。
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多