【问题标题】:C++: "unresolved overload function type" between classesC ++:类之间的“未解决的重载函数类型”
【发布时间】: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 WOO{0};

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;
};

【问题讨论】:

标签: c++ class function pointers


【解决方案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()
        

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-23
          • 2013-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-20
          • 1970-01-01
          相关资源
          最近更新 更多