2011-01-29 39 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您在調用該函數創建一個變量,然後傳遞(而是引用該變量)。