Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
LeraLem
0 / 0 / 0
Регистрация: 13.06.2014
Сообщений: 8
#1

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

06.07.2014, 09:53. Просмотров 229. Ответов 2
Метки нет (Все метки)

Доброго времени суток, пишу приложение, которое реализует все функции АТД (двусвязный список).
Есть стандартная библиотека, есть функция в этой библиотеке
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);
^
почему ругается,не могу понять, уже много что пыталась переделать, ничего путного не вышло(((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2014, 09:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблема с указателем на функцию (C++):

Переделать функцию c указателем на int, на функцию с указателем на void - C++
Есть рабочий код qsort для int: void qsort(int *base, int n) { // Прекратить если количество элементов меньше либо равно единице....

Проблема с указателем на строку - C++
Пишу класс Строка на Visual Studio. Проблема с функцией-оператором + ( Он у меня только на добавление символа, так как мне большего на...

Проблема с указателем на элемент вектора - C++
Всем доброго времени суток. Не могу никак выкрутиться) Допустим, у нас есть класс "А" с параметрами: std::vector <TNode*> nodes; И...

Работа с указателем на функцию - C++
Пытаюсь сделать указатель, принимающий строку и возвращающий вектор интов, не получается с присвоением результата из указателя в переменную...

Как правильно вызвать функцию с указателем на другую функцию как параметр - C++
Вот вариант: double f(double x) { ... } double k(double (*f)(double), double y) { ...

Typedef перед указателем на функцию - C++
Есть функция int func(int, int). Указатель на функцию int (*pointer)(int, int). Что будет означать такая запись typedef int...

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

Добавлено через 1 час 50 минут
Спасибо, уже разобралась)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 12:43
Привет! Вот еще темы с ответами:

Двумерный массив с ключом и указателем на функцию - C++
Здравствуйте. Подскажите, пожалуйста, как реализовать двумерный массив с ключом и указателем на функцию. Задача: на вход поступает...

Указатели на функцию. Задача 2: функция предикат с void указателем - C++
Сумму элементов массива, лежащих в пределах (a <b)

как написать функцию возвращающую объект с указателем на кучу - C++
уперся в следующее: есть класс содержащий в себе указатель на динамическую память (кучу). В общем-то это массив размерность которого...

В чем разница между указателем и указателем на указатель? - C++
int x, *p, *q; x=10; p=&x; q=p; cout<<*q; int x, *p, **q; x=10; p=&x; q=&p;


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru