предупреждение: инициализация из несовместимого типа указателя [-Wincompatible-pointer-types] - PullRequest
0 голосов
/ 23 мая 2018

Помогите, пожалуйста, идентифицировать проблему с указателем функции для пунктов меню, который выдает ошибку «инициализация из несовместимого типа указателя»

Это заголовочный файл

/**
 * Represents a function that can be selected from the list of
 * menu_functions - creates a new type called a menu_function.
 */
void displayItems(VmSystem * system);
typedef void (*MenuFunction)(VmSystem *);


/**
 * Represents a menu item to be displayed and executed in the program.
 **/
typedef struct menu_item
{
    char text[MENU_NAME_LEN + NULL_SPACE];
    MenuFunction function;
} MenuItem;

void initMenu(MenuItem * menu);
MenuFunction getMenuChoice(MenuItem * menu);


MenuItem menu[NUM_MENU_ITEMS];

главное менюфайл

typedef enum boolean
{
    FALSE = 0,
    TRUE
} Boolean;

void initMenu(MenuItem * menu)
{
    /* Strings names of menu items */
    char * menu_items[] = {
        "Display Items",
        "Purchase Items",
        "Save and Exit",
        "Add Item",
        "Remove Item",
        "Display Coins",
        "Reset Stock",
        "Reset Coins",
        "Abort Program"
    };

указатель функции для пунктов меню

    Boolean(*MenuFunction[])(VmSystem *) = {
        displayItems,  /*Here i got the error */
        purchaseItem,
        saveStock,
        addItem,
        removeItem,
        displayCoins,
        resetStock,
        resetCoins,
        abortProgram
    };

1 Ответ

0 голосов
/ 23 мая 2018

У вас есть две проблемы.

Первая:

typedef void (*MenuFunction)(VmSystem *);

, за которой следует

Boolean(*MenuFunction[])(VmSystem *) = { ... };

Две разные вещи, одно имя.

Затем, что касается ваших ошибок: Вы заявляете в комментарии, что, например, displayItem соответствует типу функции MenuFunction и что она возвращает void.Проблема в том, что массив MenuFunction (видите, насколько это может сбивать с толку?) - это массив функций, возвращающих Boolean.Эти два типа несовместимы, и вы должны изменить один.

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