这可能是一些基本的东西,我有一个来自一个类(cell
)的函数,标识符为woo_func_ptr
,它指向一个没有参数的void
类函数的指针({{1 }}(我void (*void_ptr)(void)
)。在另一个类中,我有一个typedef
的对象,我使用方法cell
。它不允许我,我在上面的标题中得到错误。如果这两个函数没有嵌入到类中,它们就可以正常工作
woo_func_ptr
答案 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()
如果您尝试访问特定对象的数据成员,这可能不是您想要的。
会员功能很特殊,不应被视为正常功能。