Russian Qt Forum

Qt => Общие вопросы => Тема начата: demaker от Октябрь 13, 2013, 17:11



Название: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 17:11
Выдает ошибку
no matching function for call to 'CLayer0::SetOnReceive(<unresolved overloaded function type>)'
Скажите как ее убрать?


Название: Re: Error (no matching function for call to)
Отправлено: LisandreL от Октябрь 13, 2013, 17:36
Разобраться что в вызове этой функции не так в параметрах указали.


Название: Re: Error (no matching function for call to)
Отправлено: mutineer от Октябрь 13, 2013, 17:49
Либо вызывать правильную функцию, либо реализовать функцию, которую вызываешь


Название: Re: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 17:56
Код
C++ (Qt)
 
typedef void (*FunctionPtr)(void *DataPtr, unsigned DataSize)
 
class CLayer0
{
  ...
  void SetOnRecive(FunctionPtr value);
}
 
class CommFT12
{
 ...
 void OnRecive(void *DataPtr, unsigned DataSize);
}
 
...
 
CLayer0*layer = new CLayer0;
layer->SetOnRecive(OnRecive);
 

Что тут неправильного???


Название: Re: Error (no matching function for call to)
Отправлено: mutineer от Октябрь 13, 2013, 18:14
CommFT::OnRecive() имеет прототип void (CommFT::*FunctionPtr)(void *, unsigned), что не совпадает с типом параметра SetOnRecive()

Ну и для вызова функции по такому указателю нужен будет объект класса CommFT12


Название: Re: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 18:27
Ну и для вызова функции по такому указателю нужен будет объект класса CommFT12
Вызов происходит в самом объекте CommFT12

что не совпадает с типом параметра SetOnRecive()
Как это не совпадает ??? Там же указатель на функцию.


Название: Re: Error (no matching function for call to)
Отправлено: mutineer от Октябрь 13, 2013, 18:28
void (CommFT::*FunctionPtr)(void *, unsigned)
и
void (*FunctionPtr)(void *, unsigned)

Видишь разницу?


Название: Re: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 18:34
И что делать...


Название: Re: Error (no matching function for call to)
Отправлено: mutineer от Октябрь 13, 2013, 18:35
менять тип указателя, использовать статическую функцию, использовать интерфейс вместо указателя на метод.
Что делать зависит от задачи


Название: Re: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 18:41
Я пертеписываю прогу, которая была написана на Билдере кем-то и давно.

теперь понятно зачем нужно было _closure
Код:
typedef void (__closure *FunctionPtr)(void *DataPtr, unsigned DataSize)

Есть какие-нибудь аналоги _closure?


Название: Re: Error (no matching function for call to)
Отправлено: mutineer от Октябрь 13, 2013, 18:46
Да, это такая билдеровская магия. Обходи


Название: Re: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 18:52
использовать статическую функцию

Может помочь?


Название: Re: Error (no matching function for call to)
Отправлено: Alex Custov от Октябрь 13, 2013, 18:55
Может помочь?

статический метод имеет сигнатуру как обычная функция, поэтому да.


Название: Re: Error (no matching function for call to)
Отправлено: mutineer от Октябрь 13, 2013, 19:14
использовать статическую функцию

Может помочь?

Если внутри не надо обращаться к this, то может


Название: Re: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 19:20
Если внутри не надо обращаться к this, то может
Т.е к элементам, которые описаны внутри класса?
А если надо, какие еще есть варианты?


Название: Re: Error (no matching function for call to)
Отправлено: mutineer от Октябрь 13, 2013, 19:31
может тебе вообще не нужен этот указатель, а можно обойтись сигналом
мы тут заглядывать сквозь пространство не умеем


Название: Re: Error (no matching function for call to)
Отправлено: demaker от Октябрь 13, 2013, 19:33
Идея  :)
Может