没有匹配的调用函数(期望引用指针而不是指针)

时间:2011-01-29 21:44:18

标签: c++ xcode macos gcc

我从xcode(3.2.4)/ gcc(4.0)得到错误:

/Users/admin/scm/audacity/mac/../src/toolbars/DeviceToolBar.cpp: In member function 'void DeviceToolBar::ShowInputDialog()':
/Users/admin/scm/audacity/mac/../src/toolbars/DeviceToolBar.cpp:817: error: no matching function for call to 'DeviceToolBar::ShowComboDialog(wxChoice*&, wxString)'
/Users/admin/scm/audacity/mac/../src/toolbars/DeviceToolBar.h:74: note: candidates are: void DeviceToolBar::ShowComboDialog(wxChoice*, wxString&)

所以看起来它期望在ShowComboDialog中引用一个指针,但我不知道为什么签名显然是正常的指针。此外,如果它期望引用指针,我调用它的方式应该工作。 这是第一个错误,并且之前没有特殊警告。

此外,这在MSVC 2008快递中编译。 请给我一个线索。

//in the class def
//(only relevant portions included
class DeviceToolBar:public ToolBar {

 public:
   DeviceToolBar();
   virtual ~DeviceToolBar();
   void ShowInputDialog();
 private:
   void ShowComboDialog(wxChoice *combo, wxString &title);

   wxChoice *mInput;
};

//in the cpp file
void DeviceToolBar::ShowInputDialog()
{
   ShowComboDialog(mInput, wxString(_("Select Input Device")));
}

void DeviceToolBar::ShowComboDialog(wxChoice *combo, wxString &title)
{
//...
}

2 个答案:

答案 0 :(得分:10)

问题不是第一个参数;它是第二个。你正在传递一个临时的wxString,但该函数正在期待引用。 C ++会自动将临时转换为const引用,但不能将其转换为引用。您需要使ShowComboDialog将const引用作为其第二个参数。

答案 1 :(得分:4)

您的ShowComboDialog通过非const引用获取wxString,并且您尝试将临时对象作为参数传递给此参数。您只能将const引用绑定到临时对象。

您需要更改ShowComboDialog以通过值(wxString)或const引用(const wxString&)获取其第二个参数,或者您需要为{{创建变量1}}在调用函数时创建,然后传递(引用)该变量。