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 ++:类之间的“未解决的重载函数类型”的主要内容,如果未能解决你的问题,请参考以下文章