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

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

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

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

06.07.2014, 09:53. Просмотров 221. Ответов 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);
^
почему ругается,не могу понять, уже много что пыталась переделать, ничего путного не вышло(((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2014, 09:53     Проблема с указателем на функцию
Посмотрите здесь:

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

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

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

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

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

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

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

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

Массив с указателем - C++
при формировании выходной строки каждый символ должен дублироваться. Например дана abc, а при выходе aabbcc/ Все это должно быть...

функция с указателем - C++
Плз, помогите.... :wall::help: надо написать на языке С Написать и протестировать функцию STRP ( str1, str2), которая возвращает...

Работа с указателем - C++
Есть такой указатель: char *s="n1=1&n2=2&name=test&sername=test2"; Нужно выделить с этой стоки значение name, то есть "test" и...

Непоняток с указателем - C++
Объясните пожалуйста надпись. Вот простенький пример. include <iostream> using namespace std; int cubeV (int *n) { *n = *n *...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 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 минут
Спасибо, уже разобралась)
Ответ Создать тему
Опции темы

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