1

我无法解决此错误:代码:

class myClass
{
  public:
     void callMain() ;
     void (*callme)(int a , int b);

}
void myClass::callMain()
{  
        callSomeApi(callme, <some arguments>);  //callme function pointer is passed as argument
}

void (myClass :: *callme) (int a, int b)            //  it this the correct way to define a function pointer
{

}

我在 Visual Studio 2008 错误 C2470 中收到以下错误:callme 看起来像函数定义,但没有参数列表;跳过明显的身体`

编辑:我的想法:1.我想在类myClass 2中创建成员函数指针。在范围之外定义它。3. 将该函数指针作为参数传递给某个 Api 函数。

4

3 回答 3

0

我认为您正在尝试做这样的事情,但我可能错了

class MyClass
{
   public:
   typedef void (*funcPtr)(int, int);
   MyClass(funcPtr whatToCall)
   { 
     callme = whatToCall;
   }
   void myClass::callMain()
   {  
       callSomeApi(callme, <some arguments>);  //callme function pointer is passed as argument
   }
private:
   funcPtr callme;
};

void f(int a, int b) {blah blah blah};


int main()
{
   MyClass myObject(f);
   myObject.callMain(); //will call the api function with f passed as argument
}
于 2010-11-25T14:46:32.767 回答
0

很难说出你想在这里做什么。你想定义callme为一个方法,然后将一个指针作为第一个参数传递给它callSomeApi()吗?在这种情况下,只需将其定义为一个普通的旧方法,然后输入:你的类callSomeApi(&callme, ...)callMain()不需要函数指针成员。

如果您出于某种原因需要一个函数指针作为成员,那么您在第 5 行中的声明是正确的,您可以键入callme = &someFunction以将指针设置为指向someFunction(),这必须在其他地方定义。

于 2010-11-25T14:51:04.953 回答
-1

是的,但为什么会有尸体?callme是成员(函数指针)。

编辑我不知道为什么这被否决了。

一个人不会到处写

int (*a)(int, int) {
}

因为定义了一个类型为int (*a)(int, int);的变量。aint (*)(int, int)

如果 opener 想使用一个函数作为回调 in callSomeApi,他需要做

class myClass {
    ....
    void callme(int a, int b);
    ....
}

void myClass::callMain() { callSomeApi(&myClass::callme, this, <etc>); }

void myClass::callme(int a, int b) { ... }

并希望 callSomeApi 接受 pmfs 或函数对象(并使用bind或类似技术)

编辑开启者的更改。

指向成员函数的指针是指针。它不是一个函数。

为了显示,

int a() { return 1; }

定义一个函数a。这个函数有类型int ()。一个函数也有一个函数体。

但是,函数指针是通过以下方式定义的:

int (*f)();

在这种情况下f是一个函数指针。它没有函数体(因为它不是函数)。

=可以通过:f = &a;或分配给函数指针,f = a;例如,让我们f();随后执行将调用的操作a

但基本上,函数指针没有主体。指向成员函数的指针也没有。

于 2010-11-25T14:37:40.987 回答