我在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个值吗?我可以不发送任何价值吗?
帮帮我......
答案 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();
}