Ошибка массива указателей на функции: инициализация из несовместимого типа указателя - PullRequest
0 голосов
/ 15 июня 2019

Я хочу создать массив указателей на функции, который будет содержать массив указателей на функции. Но я продолжаю получать инициализацию из-за несовместимой ошибки типа указателя в инициализаторе fun_ptr fun_ptr_arr[3] = {fun1, fun2, fun3};.

Я пытался typedef void (*fun_ptr) (myStruct**,char**);, но ошибка все еще сохраняется, и я не уверен, что пошло не так.

struct myStruct
{
    char *value;
    struct myStruct *next;
}
typedef void (*fun_ptr) (myStruct**,char*[]);

void fun1 (myStruct **theStruct, const char **arguments) {};
void fun2 (myStruct **theStruct, const char **arguments) {};
void fun3 (myStruct **theStruct, const char **arguments) {};

void main()
{
    fun_ptr fun_ptr_arr[3] = {fun1, fun2, fun3};
}

И моя ошибка, для каждой из функций

test.c:285:69: note: (near initialization for ‘fun_ptr_arr[0]’)
test.c:285:69: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
  fun_ptr fun_ptr_arr[3] = {fun1, fun2, fun3};
                            ^~~~~~~~

1 Ответ

2 голосов
/ 15 июня 2019

Ваш прототип - typedef void (*fun_ptr) (myStruct**,char*[]);

Ваши функции: void fun1 (myStruct **, const char **)

Обратите внимание на дополнительные const

Это разные типы, и поэтому, компиляторжалуется.

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