2017-03-03 49 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; 
}