Форум программистов, компьютерный форум CyberForum.ru

Проблема с указателем на функцию - C++

Восстановить пароль Регистрация
 
LeraLem
0 / 0 / 0
Регистрация: 13.06.2014
Сообщений: 8
06.07.2014, 09:53     Проблема с указателем на функцию #1
Доброго времени суток, пишу приложение, которое реализует все функции АТД (двусвязный список).
Есть стандартная библиотека, есть функция в этой библиотеке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 int DLWalk(DLLIST *List,
           int(*Func)(int, void *, void *),
           void *Args)
{
  DLLIST *ThisItem = List;
  int Result = 0;
 
  if(List != NULL)
  {
    for(ThisItem = DLGetFirst(List);
        0 == Result && ThisItem != NULL;
        ThisItem = ThisItem->Next)
    {
      Result = (*Func)(ThisItem->Tag,
                       ThisItem->Object,
                       Args);
    }
  }
  return Result;
}
проблема возникает с указателем на функцию
Указываю указатель на функцию
C++
1
int(*p)(int,STUDNUM *,char*);
STUDNUM - это структура типа:
C++
1
2
3
4
typedef struct Dvysv_spisok {
char name[40]; //имя студента
char nomer[40]; //номер студента
}STUDNUM;
Функция, на которую указывает p, должна сравнивать имя студента, введенное пользователем, с именем в структуре и при совпадении выводить номер студента( с поиском и выводом проблем нет).

p=&Poisk_nomera;//присваивает адрес функции Poisk_nomera указателю
int Poisk_nomera(int a, STUDNUM *ftU, char *ukaz){//сама функция

Проблема возникает, когда я пытаюсь передать указатель на функцию p в функцию стандартной библиотеки
C++
1
2
3
int DLWalk(DLLIST *List,
           int(*Func)(int, void *, void *),
           void *Args)
вот так передаю DLWalk(HeadSpisok,p,student);
компилятор ругается
D:\Tools\QtCreator\bin\ATD_Dvysv_spisok\mainwindow.cpp:528: ошибка: invalid conversion from 'int (*)(int, STUDNUM*, char*) {aka int (*)(int, Dvysv_spisok*, char*)}' to 'int (*)(int, void*, void*)' [-fpermissive]
i=DLWalk(HeadSpisok,p,student);
^
почему ругается,не могу понять, уже много что пыталась переделать, ничего путного не вышло(((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2014, 09:53     Проблема с указателем на функцию
Посмотрите здесь:

C++ функция с указателем
как написать функцию возвращающую объект с указателем на кучу C++
Проблема с указателем на строку C++
C++ Переделать функцию c указателем на int, на функцию с указателем на void
В чем разница между указателем и указателем на указатель? C++
Typedef перед указателем на функцию C++
Как правильно вызвать функцию с указателем на другую функцию как параметр C++
C++ Проблема с указателем на элемент вектора

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,909
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 10:15     Проблема с указателем на функцию #2
ну так у Вас тип указателя:
C++
1
int(*)(int,STUDNUM *,char*);
а функция принимает:
C++
1
int(*)(int, void *, void *)
LeraLem
0 / 0 / 0
Регистрация: 13.06.2014
Сообщений: 8
06.07.2014, 12:43  [ТС]     Проблема с указателем на функцию #3
Это понятно, но ведь тип void* это неопределенный тип, который заранее неизвестен, то есть можно любые типы данных передавать в эту функцю. Или я что-то не так понимаю?)

Добавлено через 1 час 50 минут
Спасибо, уже разобралась)
Yandex
Объявления
06.07.2014, 12:43     Проблема с указателем на функцию
Ответ Создать тему
Опции темы

Текущее время: 15:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru