如何从c ++中的另一个函数调用函数?

时间:2010-06-02 05:04:29

标签: visual-c++

我在cpp文件中有这个函数定义;

    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个值吗?我可以不发送任何价值吗?

帮帮我......

4 个答案:

答案 0 :(得分:2)

是的,您定义的方式必须为所有参数提供值。此外,最后一个参数必须是变量,因为您将其定义为通过引用传递。

如果有些情况看起来有些愚蠢而且您只是想填写所有0并且对您来说是假的,那么您可以将这些值作为默认值提供给定义,如下所示:

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

(注意:你不能为bHandled提供默认值,因为它是通过引用传递的。这表明你的例程想要修改它,因此必须是一个可修改的变量)。

然后你可以这样称呼它:

onSetRedraw(false)

另一种选择是在没有任何参数的情况下制作例程的另一个副本。如果你想要你可以使它private,那么只有类的成员才能调用它。

答案 1 :(得分:0)

这一切都取决于函数原型,如果存在带默认参数的重载,则不需要在函数内提供值。如果没有,你将需要所有四个参数。

由于两个方法似乎都在同一个类中,因此您显示的方法*应该*工作。

答案 2 :(得分:0)

不,最后一个参数是一个参考值,所以你需要提供一个变量而不是一个值(为了更准确,你需要提供一个左值而不是一个右值):

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

如您的示例所示,您必须提供所有参数。但是可以提供默认参数,以便您不必这样做。也就是说,C ++规则要求您在第一个值之前为最后一个参数提供默认参数。由于必须使用变量/左值初始化引用,因此执行此操作会很尴尬。

答案 3 :(得分: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();
   }