Нет соответствующей функции для вызова (ожидает указатель вместо указателя) - PullRequest
4 голосов
/ 30 января 2011

Я получаю сообщение об ошибке из 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)
{
//...
}

Ответы [ 2 ]

10 голосов
/ 30 января 2011

Проблема не в первом параметре; это второй. Вы передаете временный wxString, но функция ожидает ссылку. C ++ автоматически преобразует временную ссылку в const, но не может преобразовать ее в ссылку. Вам нужно заставить ShowComboDialog принять константную ссылку в качестве второго параметра.

4 голосов
/ 30 января 2011

Ваш ShowComboDialog принимает wxString по неконстантной ссылке, и вы пытаетесь передать временный объект в качестве аргумента этому параметру.Вы можете привязывать только постоянные ссылки к временным объектам.

Вам нужно либо изменить ShowComboDialog, чтобы получить второй аргумент либо по значению (wxString), либо по константной ссылке (const wxString&), либо вам нужно создать переменную для wxString, которую высоздать, когда вы вызываете функцию и затем передаете (ссылку на) эту переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...