2016-08-15 85 views
0

所以我在我的头path.h定义的结构如下:“提领指向不完全类型”

typedef struct path Path; 

struct Path { 

    Path* branching_paths; 
    uint32_t nb_paths; 
}; 

,并在相同的标题我已经声明和定义下列内联函数:

inline void init_path(Path* path); 

    inline void init_path(Path* path){ 

    path->branching_paths = NULL; 
    path->nb_paths = 0; 
} 

而且我不知道是什么原因,我得到这个错误。我已经在网上搜索,但据我看,我已经在头正确定义的结构,还是我失去了一些东西?

./../Path.h:54:9: error: dereferencing pointer to incomplete type 'Path {aka struct path}' 
    path->branching_paths = NULL; 
+3

这是因为结构的路径是不一样的结构路径。 – 2501

+0

但如果我键入typedef结构路径路径,我没有叫它然后路径? – malajedala

+0

什么是'struct path'? – yano

回答

1

您的typedef中有一个错字。

您为struct path定义了一个typedef,然后您以后定义了struct Path。由于C区分大小写,因此这些被视为两种不同的类型。

您现在的方式是,您将struct path(以Path作为别名)声明,但尚未定义它。所以当你试图解引用Path *时,编译器不知道那个结构是什么样子,因为你没有告诉它。

你想要的是:

typedef struct Path Path; 
+0

这不是一个错字,我想我现在只是不明白,通过编写:'typedef结构路径路径'我将结构路径定义为路径,所以当然“结构路径”尚未定义。对? – malajedala

+0

@malajedala:是的,在typedef的末尾,没有定义'struct path'。麻烦的是在'struct path {...};','struct path'的末尾仍然没有定义。你需要'typedef struct Path Path;'作为最简单的修复。 –

+0

是的,这是真的,谢谢!我会这样做,它是最简单的。不过这个错误很好,所以现在我真的明白这些命令背后发生了什么!谢谢 – malajedala