Karam-sa Ответов: 1

Указатель на неполный тип класса не допускается


я пытаюсь выполнить эту функцию, но у меня есть ошибка
pointer to incomplete class type is not allowed
когда я использую переменную карты !!!

Что я уже пробовал:

typedef struct Map_t* Map;

struct map_t
{
    char key;
    char value;
    int iterator;
    struct map_t* next;
};

Map mapCreate()
{
    Map new_map = (Map)malloc(sizeof(struct map_t));
    if (new_map == NULL)
    {
        return  NULL;
    }

    new_map->key = NULL;
    new_map->value = NULL;
    new_map->next = NULL;
    new_map->iterator = 0;
    return new_map;
}

1 Ответов

Рейтинг:
1

steveb

Вы используете struct map_t в качестве члена структуры. Для этого требуется "форвардная декларация"

/*Forward declaration*/
struct map_t;

struct map_t
{
    char key;
    char value;
    int iterator;
    struct map_t* next;/*at this point this is still an incomplete type thus the forward declaration above*/
};


Rick York

Нет, прямое объявление не требуется. Код будет компилироваться без него.

-edit - то есть VS2017 будет компилировать его.

steveb

Да, ты прав, я виноват. Я думаю, что некоторые старые компиляторы требовали прямого Децла