Двойной указатель предупреждений о времени компиляции на языке Си

Здесь я создал структуру под названием каталог. Который имеет двойной указатель на детей и один указатель на родителя.

    typedef struct {
        struct directory** children;
        struct directory* parent ; 
    }directory;

Здесь я создал функцию для добавления каталога.

    directory* add_dir (char* name , char* path , directory* parent) {

        directory* d = malloc (sizeof (directory)) ;
        memset ( d , 0 , sizeof(directory)) ;
        //WARNING by line below
        d->children = (directory**)malloc ( sizeof(directory*) * DIR_COUNT) ;
        memset ( d->children , 0 , sizeof(directory*) * DIR_COUNT) ;
        //WARNING by line below
        d->parent  = (directory*) parent ;
            //Wanrning by line below
            parent->children[parent->alloc_num_child] = (directory*) d ;
    }

Я определил структуру с именем directory, которая имеет двойной указатель на дочерний элемент и один указатель на родительский каталог. Когда я собираю это, я получаю предупреждения.

Warnings :


warning: assignment from incompatible pointer type [enabled by default]
warning: assignment from incompatible pointer type [enabled by default]
warning: assignment from incompatible pointer type [enabled by default]

Я не уверен, почему я получаю это предупреждение?

1 ответ

Решение

Посмотрите точно на ваше объявление структуры.

Вы объявляете typedef с именем каталог. Вы нигде не объявляете структурный каталог. Но вы используете "struct directory" внутри структуры без тегов, которую вы объявляете.

Компилятор не может догадаться, что вы имеете в виду typedef с именем "directory", когда пишете "struct directory".

Я обычно писал бы

typedef struct _directory {
    struct _directory** children;
    struct _directory* parent ; 
}directory;
Другие вопросы по тегам