我的问题是我想在另一个标题函数作为参数传递标题函数,但是我得到一个错误,我不知道该怎么做。
头1:
class headerClass1{
public:
void funct1(){}
};
HEADER2:
typedef void (*functCall)()
class headerClass2{
public:
void funct2(functCall fc()){}
};
主:
int main(){
headerClass1 *h1=new headerClass1(parameters);
headerClass2 *h2=new headerClass2(parameters);
h2->funct2(h1->funct1());
^返回错误"无效使用void expresion"
...
delete h1;
delete h2;
return 0;
}
请详细说明为什么这不起作用。
答案 0 :(得分:1)
那里有几个错误。
定义成员函数的函数指针必须这样做:
typedef void(headerClass1::*functCall)(void);
然后,您需要一个对象来调用此函数指针。这是一个有效的例子:
class headerClass1
{
public:
void funct1()
{
std::cout << "funct1" << std::endl;
}
};
typedef void(headerClass1::*functCall)(void);
class headerClass2
{
public:
void funct2(headerClass1& o, functCall fn)
{
std::cout << "funct2" << std::endl;
(o.*fn)();
}
};
int main()
{
headerClass1 c1;
headerClass2 c2;
c2.funct2(c1, &headerClass1::funct1);
return 0;
}
答案 1 :(得分:0)
因为您指定了函数的指针而不是类方法。 作为参数,您只需发布无效的功能结果。 你需要一个方法指针和一个对象指针。
void funct2(void(headerClass1 :: * pMethod)(),headerClass1 * pObject);
h2-&gt; funct2(&amp; headerClass1:funct1,h1);
在funct2中调用: (* pObject * pMethod。)();