Russian Qt Forum
Ноябрь 25, 2024, 07:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Error (no matching function for call to)  (Прочитано 22501 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Октябрь 13, 2013, 17:11 »

Выдает ошибку
no matching function for call to 'CLayer0::SetOnReceive(<unresolved overloaded function type>)'
Скажите как ее убрать?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Октябрь 13, 2013, 17:36 »

Разобраться что в вызове этой функции не так в параметрах указали.
Записан
mutineer
Гость
« Ответ #2 : Октябрь 13, 2013, 17:49 »

Либо вызывать правильную функцию, либо реализовать функцию, которую вызываешь
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #3 : Октябрь 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);
 

Что тут неправильного???
« Последнее редактирование: Октябрь 13, 2013, 18:06 от demaker » Записан
mutineer
Гость
« Ответ #4 : Октябрь 13, 2013, 18:14 »

CommFT::OnRecive() имеет прототип void (CommFT::*FunctionPtr)(void *, unsigned), что не совпадает с типом параметра SetOnRecive()

Ну и для вызова функции по такому указателю нужен будет объект класса CommFT12
« Последнее редактирование: Октябрь 13, 2013, 18:18 от mutineer » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #5 : Октябрь 13, 2013, 18:27 »

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

что не совпадает с типом параметра SetOnRecive()
Как это не совпадает Непонимающий Там же указатель на функцию.
Записан
mutineer
Гость
« Ответ #6 : Октябрь 13, 2013, 18:28 »

void (CommFT::*FunctionPtr)(void *, unsigned)
и
void (*FunctionPtr)(void *, unsigned)

Видишь разницу?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #7 : Октябрь 13, 2013, 18:34 »

И что делать...
Записан
mutineer
Гость
« Ответ #8 : Октябрь 13, 2013, 18:35 »

менять тип указателя, использовать статическую функцию, использовать интерфейс вместо указателя на метод.
Что делать зависит от задачи
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #9 : Октябрь 13, 2013, 18:41 »

Я пертеписываю прогу, которая была написана на Билдере кем-то и давно.

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

Есть какие-нибудь аналоги _closure?
« Последнее редактирование: Октябрь 13, 2013, 18:47 от demaker » Записан
mutineer
Гость
« Ответ #10 : Октябрь 13, 2013, 18:46 »

Да, это такая билдеровская магия. Обходи
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #11 : Октябрь 13, 2013, 18:52 »

использовать статическую функцию

Может помочь?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #12 : Октябрь 13, 2013, 18:55 »

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

статический метод имеет сигнатуру как обычная функция, поэтому да.
Записан
mutineer
Гость
« Ответ #13 : Октябрь 13, 2013, 19:14 »

использовать статическую функцию

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

Если внутри не надо обращаться к this, то может
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #14 : Октябрь 13, 2013, 19:20 »

Если внутри не надо обращаться к this, то может
Т.е к элементам, которые описаны внутри класса?
А если надо, какие еще есть варианты?
« Последнее редактирование: Октябрь 13, 2013, 19:24 от demaker » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.222 секунд. Запросов: 23.