我正在使用类中的对象来实现其功能。该对象的类定义的头包含一个typedef,然后是类声明:
typedef void (*Foo)(int arg);
class Bar
{private : double func(Foo f){};}
在我的课堂上,我想创建一个成员函数以将其传递给func:
class myClass
{
private :
Bar bar;
void my_func(int arg);
void my_caller();
};
在.cpp中:
void myClass::my_caller()
{
bar.func(&myClass::my_func);
}
返回错误“没有匹配的函数调用Bar :: func ...”。 我的理解是在typedef中使用的类型不是“指向成员函数的指针”而是“指向函数的指针”。我想我必须更改此typedef才能更改它,但我不知道如何。
我绝对是C ++的初学者,所以我在这里可能会偏离轨道。
编辑:
我了解我必须带给typedef的更改以代替指向成员函数的指针。问题在于此typedef位于单独的头文件中,因此编译器返回“尚未声明'myClass'”。
相反,我将研究函子和std :: function库。
答案 0 :(得分:1)
指向函数的指针和指向成员函数的指针是两个不同的事物。由于所讨论的函数是myClass
的成员,因此正确的函数指针类型为:
typedef void (myClass::*Foo)(int arg);