2010-06-02 294 views
0

我有我的cpp文件中的這個函數定義;如何從C++中的另一個函數調用一個函數?

LRESULT CRebarHandler::onSetRedraw(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
    { 
    bHandled=false; 
    if (m_ieVer==6){ 
     if (!m_hWndToolbar) 
     scanForToolbarSlow(); 
    } 
    return S_OK; 
    } 

我的問題是我不知道如何從同一個文件中的另一個函數調用它。我想從此功能調用它:

void CRebarHandler::setButtonMenu2(){ 
bool b=false; 
onSetRedraw(0,0,0,false); <------ is this the correct way? 
} 

我必須提供所有4個值嗎?我可以不發送任何價值嗎?

幫助我..

回答

0

這一切都依賴於函數原型,如果沒有與默認PARAMS過載,你不需要在函數中提供的值。如果沒有,則需要全部四個參數。

由於這兩種方法似乎都在同一個類中,所以您顯示*的方法應該工作。

2

是的,您定義事物的方式必須爲所有參數提供值。此外,最後一個參數必須是一個變量,因爲您將其定義爲通過引用傳遞。

如果在有些情況下,似乎有種愚蠢的,你就像它在所有0的補假給你,你可以用這些值作爲默認提供的定義,像這樣:

LRESULT CRebarHandler::onSetRedraw(UINT uMsg=0, WPARAM wParam=0, LPARAM lParam=0, BOOL& bHandled) 
    { 

(注意:您不能爲bHandled提供默認值,因爲它是通過引用傳遞的。這表示您的例程想修改它,因此必須是可修改的變量)。

然後,你可以這樣調用:

onSetRedraw(false) 

另一種選擇是,以才使例程的另一個副本沒有任何這些參數。如果你想要的話,你可以使它成爲private,這樣只有這個類的成員可以調用它。

0

號,最後一個參數是參考值,所以你需要提供一個變量而不是一個值(要稍微更準確,你需要提供一個左值而不是右值):

void CRebarHandler::setButtonMenu2(){ 
    bool b=false; 
    onSetRedraw(0,0,0,b); // note the change here 
} 

就你的例子而言,你必須提供所有參數。但是可以提供默認參數,以便不必這樣做。也就是說,C++的規則要求您在第一個值之前爲最後一個參數提供默認參數。由於引用必須用變量/左值初始化,因此執行此操作會很尷尬。

0

我認爲你應該重構你的代碼。它變得更加可重用。 你的onSetRedraw函數幾乎不需要參數,所以事實證明,從那裏提取方法更容易。

void CRebarHandler::scan() 
    { 
    if (m_ieVer==6){ 
     if (!m_hWndToolbar) 
     scanForToolbarSlow();´ 
    } 
    } 

    LRESULT CRebarHandler::onSetRedraw(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
    { 
    bHandled=false; 
    scan(); 

    return S_OK; 
    } 



    void CRebarHandler::setButtonMenu2() 
    { 
    bool b=false; 
    scan(); 
    } 
相關問題