2017-03-03 39 views
-1

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

头1:

class headerClass1{ 
public: 
void funct1(){} 
}; 

标题2:

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()); 

^返回错误 “无效使用无效expresion的”

... 
delete h1; 
delete h2; 
return 0; 
} 

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

+1

有太多的基本错误。这将有利于你通过一本教科书来正确理解该语言的基础知识。 –

+0

'h1-> funct1()'是对funct1的调用,'&h1-> funct1'是函数的地址(您需要传递)。在headerClass2中,你的funct2参数应该改为'void funct2(functCall fc)'。然后你仍然有问题,你的函数是成员函数而不是普通函数。如果你描述你想达到的目标会更好。 –

回答

0

因为您指定的函数不是指向类方法的指针。 而作为参数,你只需发布无效的函数结果。 您需要一个方法指针加一个对象指针。 (void(headerClass1 :: * pMethod)(),headerClass1 * pObject);}};}}}}

h2-> funct2(& headerClass1:funct1,h1);

call function2: (* pObject。* pMethod)();

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