0

我在一个类中有一个函数指针向量,我想向它传递其他类中的函数地址。以下实现给出了错误。正确的方法是什么?

class A
{
public:
 void func ()
 {
 }
};

class B
{
public:
 std::vector<void(*)()) myVec;
 void update_func()
 {
  myVec.push_back(&A::func);
 } 
};

int main()
{
 B* b = new B;
 b->update_func();
 return 0;
}
4

3 回答 3

3

指向非静态成员函数的指针A::func没有 type void(*)(void),它有 type void(A::*)(void)。因此,要么更改向量以匹配您希望它具有的元素,要么使用指向向量正确类型函数的指针。

于 2013-03-18T17:43:40.733 回答
1

A 的 func() 必须是静态的以匹配函数指针的声明。同时,它必须public是 B 类可以访问的。B update_func()中也需要是公共的,否则main它是不可访问的。矢量声明有错字,必须是vector<>,不是vector<)

//

class A
{
  public:
   static void func ()
   {
   }
};

class B
{
 std::vector<void(*)()> myVec;
 public void update_func()
 {
  myVec.push_back(&A::func);
 } 
};

int main()
{
 B* b = new B;
 b->update_func();
 return 0;
}
于 2013-03-18T17:54:21.647 回答
0

这段代码有很多问题..如果你想调用那个函数,第一个 b->func 应该有 () ..第二个..什么是 void update func()..也是错误的代码..第三个你不能使用这些函数因为它们是私有的...但是您确实将其正确推入向量中...

于 2013-03-18T17:40:28.580 回答