C ++传递函数作为参数(在标题之间)

时间:2017-03-03 07:57:49

标签: c++11

我的问题是我想在另一个标题函数作为参数传递标题函数,但是我得到一个错误,我不知道该怎么做。

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

请详细说明为什么这不起作用。

2 个答案:

答案 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。)();