2014-10-21 4 views
1

my_functions.hПочему я не могу инициализировать мой массив структур, содержащих указатели на функции в C?

void * f1 (int * param); 
void * f2 (int * param); 
void * f3 (int * param); 
void b1(int * param); 
void b2(int * param); 
void b3(int * param); 

my_prog.c

#include <my_functions.h> 

// Typedef my function pointers 
typedef void * (*foo)(int*); 
typedef void (*bar)(int*); 

// Declare the structure that will contain function pointers 
typedef struct _my_struct 
{ 
    int tag; 
    foo f; 
    bar b; 
}my_struct; 

// Declare and initialize the array of my_struct 
my_struct array[] = 
{ 
    {1, f1, b1}, 
    {2, f2, b2}, 
    {3, f3, b3} 
}; 

Компилятор говорит:

предупреждение: инициализации от типа несовместим указателя

Я посмотрел на:

Но я до сих пор не могу понять, что я пропустил ...
Для меня, всех типов и функции известны, когда я пытаюсь инициализировать свой массив.
Невозможно выполнить инициализацию вне функции?

[EDIT] Я нахожусь в Linux, используя встроенную версию для консоли GCC 4.9.

+0

Ваш код работает для меня. – 2501

+0

Для меня тоже. На какой строке вы получаете ошибку? Какой компилятор/платформа/ОС вы используете? –

+0

Я просматриваю свой код, поскольку я упростил его в своем сообщении ... Возможно, я что-то пропустил. Я получаю предупреждение на всех закрывающих скобках '{x, fx, bx}' – Coconop

ответ

2

Хорошо, поэтому мой код очень хорошо работает на моем ПК, на самом деле это компилятор arm-gcc, который я использую для встроенной цели, которая выдает эту ошибку, потому что кажется, что она не может распознать тип указателей функций без явное приведение:

Вот исправление:

my_struct array[] = 
{ 
    {1, (foo)f1, (bar)b1}, 
    {2, (foo)f2, (bar)b2}, 
    {3, (foo)f3, (bar)b3} 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^