LINUX.ORG.RU

Си, инициализация указателя на функцию

 ,


0

1

Среда IAR_ARM.

typedef struct
{
	int (*f_calc)(void *);
}ABC;

int func1(ABC *p)
{  
  return 1;
}

const ABC mas[1]={func1};

int main()
{
  return 0;
}

Получаю ошибку. Возможна ли операция инициализации указателя,в структуре, на функцию, если эта же структура является входным параметром для функции? Error[Pe144]: a value of type «int (*)(ABC *)» cannot be used to initialize an entity of type «int (*)(void *)»

typedef struct ABS {
	int (*f_calc)(struct ABS *);
} ABC;

int func1(ABC *p)
{  
	return 1;
}

const ABC mas[1] = { {func1} };

int main()
{
	return 0;
}
vvviperrr ★★★★★ ()
Последнее исправление: vvviperrr (всего исправлений: 2)

Ещё один изобретатель ООП на базе сишечки?

Всё уже придумано до нас.

anonymous ()

В GCC компилируется, и потому возникает вопрос: а чем этот ваш иар лучше «нашего» GCC?

Rupricht ★★ ()
typedef int (*p_func)(void *);
typedef struct
{
        p_func f_calc;
}ABC;

int func1(ABC *p)
{
  return 1;
}

const ABC mas[1]={ {(p_func)func1} };

int main()
{
  return 0;
}

Или:

ypedef int (*p_func)(void *);
typedef struct
{
        p_func f_calc;
}ABC;

int func1(void *p)
{
  ABC *p_abc = p;
  return 1;
}

const ABC mas[1]={ {func1} };

int main()
{
  return 0;
}

vodz ★★★★★ ()
typedef struct _ABC
{
	int (*f_calc)(struct _ABC *);
}ABC;

int func1(ABC *p)
{  
  return 1;
}

const ABC mas[1]={func1};

int main()
{
  return 0;
}
anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.