我从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)
{
//...
}
答案 0 :(得分:10)
问题不是第一个参数;它是第二个。你正在传递一个临时的wxString
,但该函数正在期待引用。 C ++会自动将临时转换为const
引用,但不能将其转换为引用。您需要使ShowComboDialog
将const引用作为其第二个参数。
答案 1 :(得分:4)
您的ShowComboDialog
通过非const引用获取wxString
,并且您尝试将临时对象作为参数传递给此参数。您只能将const引用绑定到临时对象。
您需要更改ShowComboDialog
以通过值(wxString
)或const引用(const wxString&
)获取其第二个参数,或者您需要为{{创建变量1}}在调用函数时创建,然后传递(引用)该变量。