2011-01-29 69 views
3

我从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 express。 请给我一点线索。

//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) 
{ 
//... 
} 

回答

9

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

4

ShowComboDialog非const引用需要wxString和你试图传递一个临时对象作为参数传递给此参数。您只能将const引用绑定到临时对象。

你要么需要改变ShowComboDialog按值(wxString),或者通过const引用(const wxString&)取第二个参数,或者您需要创建为wxString您在调用该函数创建一个变量,然后传递(而是引用该变量)。