C ++:类之间的“未解析的重载函数类型”

时间:2013-03-28 00:46:59

标签: c++ class function pointers

这可能是一些基本的东西,我有一个来自一个类(cell)的函数,标识符为woo_func_ptr,它指向一个没有参数的void类函数的指针({{1 }}(我void (*void_ptr)(void))。在另一个类中,我有一个typedef的对象,我使用方法cell。它不允许我,我在上面的标题中得到错误。如果这两个函数没有嵌入到类中,它们就可以正常工作

woo_func_ptr

4 个答案:

答案 0 :(得分:3)

首先,指向woosah成员函数的指针应声明为

  typedef void (woosah::*void_ptr)(void);

然后编译器会抱怨它在解析这个语句时需要看到woosah定义。

如果你让编译器首先通过向上移动来解析类woosah,那么它会抱怨没有定义类型单元格(因为它包含在woosah中)。由于解析时的循环依赖性,这仍然无法解决您的问题。

解决循环依赖的一种方法是将 temp_cell 作为指向单元格实例的指针并将其包含在woosah中。

另请注意,调用成员函数的语法是使用。*或 - > *

      void run()
      {
          // other stuff
          temp_cell->woo_func_ptr(temp_cell->*woo_func); // assuming temp_cell is pointer to some cell instance
         // yet more stuff
       }

答案 1 :(得分:2)

成员函数不像常规函数。这就是为什么有一个单独的“成员函数指针”类型的原因。这是因为成员函数传递了隐式this指针。

事实上,该标准甚至限制(严重)指向成员函数的指针的转换。

这是你错误的来源。

答案 2 :(得分:2)

答案 3 :(得分:1)

您可以使用静态类函数...

更改

void woo_func()

static void woo_func()

如果您尝试访问特定对象的数据成员,这可能不是您想要的。

会员功能很特殊,不应被视为正常功能。