Двойной указатель предупреждений о времени компиляции на языке Си
Здесь я создал структуру под названием каталог. Который имеет двойной указатель на детей и один указатель на родителя.
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;