Синтаксис генерации объекта Данные для использования в качестве функционального аргумента, приводящего к ошибке - PullRequest
0 голосов
/ 22 ноября 2018

У нас есть typedef * int Data, я пытаюсь создать функцию генератора

Data data_gen(int idata){
  Data d = malloc(sizeof(idata));
  d = &idata;
  return d;
}

Однако, когда я передаю эту функцию в качестве аргумента другой функции, для которой в качестве аргумента требуются данные, я получаю следующую ошибку, метод делает указатель из целого числа без приведения, что говорит о том, что мой метод data_gen возвращает целое число, а не объект данных.

typedef int* Data;

Я вызываю эту функцию с data_gen и получаю ошибку:

void bstree_insert(BStree bst, Key key, Data data);

где третий аргумент - вызов data_gen

1 Ответ

0 голосов
/ 22 ноября 2018

Это исправляет ошибку в функции генератора:

Data
data_gen(int idata)
{
    Data d = malloc(sizeof(*d));

    *d = idata;

    return d;
}

A typedef для этой функции будет:

typedef Data (*data_function)(int);

Тогда ваша функция дерева должна быть:

void bstree_insert(BStree bst, Key key, data_function gen);

Итак, сейчас вы смешиваете простой указатель (т.е. int *) с указателем на функцию , которая возвращает int *.Это не одно и то же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...