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

Posted

技术标签:

【中文标题】C ++:类之间的“未解决的重载函数类型”【英文标题】:C++: "unresolved overload function type" between classes 【发布时间】:2013-03-28 00:46:58 【问题描述】:

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

typedef void (*void_ptr)(void);



double WOO0;

struct cell 
void woo_func_ptr(void_ptr jo)

    jo();

;


class woosah

public:
void woo_func()

    WOO+=rand();
    std::cout << WOO << std::endl;
;

void run()

    // other stuff
    temp_cell.woo_func_ptr(woo_func);
    // yet more stuff


cell temp_cell;
;

【问题讨论】:

***.com/questions/7015362/…的可能重复 【参考方案1】:

首先应该将指向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
       

【讨论】:

【参考方案2】:

http://msdn.microsoft.com/en-us/library/b0x1aatf(v=vs.80).aspx 显示了类似的错误及其修复方法。

【讨论】:

【参考方案3】:

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

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

这就是你的错误的根源。

【讨论】:

【参考方案4】:

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

改变

void woo_func()

static void woo_func()

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

成员函数有点特殊,不应被视为普通函数。

【讨论】:

以上是关于C ++:类之间的“未解决的重载函数类型”的主要内容,如果未能解决你的问题,请参考以下文章

重载覆盖

C++深度剖析学习总结 22 类中的函数重载

C++深度剖析学习总结 22 类中的函数重载

C++JavaC# 多态知识总结

C++JavaC# 多态知识总结

C++JavaC# 多态知识总结