2011-01-29 8 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でコンパイルされます。 私に手がかりを与えてください。あなたのShowComboDialog

//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

問題は最初のパラメータではありません。その2番目の。あなたは一時的なwxStringを渡していますが、関数は参照を期待しています。 C++は自動的にテンポラリをconst参照に変換しますが、それを参照に変換することはできません。 ShowComboDialogにconst参照を2番目のパラメータとして使用させる必要があります。

4

は非const参照によってwxStringを取り、あなたは、このパラメータの引数として一時的なオブジェクトを渡すためにしようとしています。 const参照は一時オブジェクトにのみバインドできます。

あなたは(wxString)値またはconst参照(const wxString&)のいずれかによって2番目の引数を取るようにShowComboDialogを変更する必要がいずれか、またはあなたが関数を呼び出すときに作成wxStringための変数を作成して渡す必要があります(代わりにその変数への参照)。

関連する問題