【问题标题】:Compile time warnings double pointer in C languageC语言编译时警告双指针
【发布时间】:2014-04-13 21:15:54
【问题描述】:

在这里,我创建了一个名为目录的结构。它具有指向子级的双指针和指向父级的单指针。

    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]

我不确定为什么会收到此警告?

【问题讨论】:

  • typedef struct { --> typedef struct directory { 还是 struct directorey 其他地方定义的?还有alloc_num_child 没有struct directorey 的成员。

标签: c pointers struct compiler-warnings double-pointer


【解决方案1】:

仔细查看您的结构声明。

你声明了一个 typedef 命名的目录。您无需在任何地方声明结构目录。但是您在声明的未标记结构中使用“结构目录”。

当你写“struct directory”时,编译器无法猜测你的意思是名为“directory”的typedef。

我通常会写

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

【讨论】:

  • 非常感谢。很有帮助。
猜你喜欢
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多