在自己的库中取消引用指向不完整类型的指针

时间:2012-04-20 10:26:13

标签: c compiler-errors

我的库里有几个struct:edge,vertex,graph。 我想隐藏用户的结构体(用户必须使用API​​),所以在头文件(例如edge.h)中我只是把:

typedef struct edge edge_t;

edge struct的定义在edge.c中。

struct edge {...};

这很好,但我想不想隐藏我自己的代码中的struct的主体。我想在edge.c中使用:

vertex_t v;
v.some_attribute = x;

现在我得去解除指向不完整类型错误的指针,是否可以修复它? 是否有任何其他选项对所有struct元素使用访问器(如用户)?

2 个答案:

答案 0 :(得分:5)

如果您需要使用其他源文件中的结构,则需要完整的结构定义。所以解决方案是将struct edge { /* ... */ }放在头文件中,并在需要时包含标题。

答案 1 :(得分:2)

Joachim Pileborg是对的。

编译器需要知道结构的大小才能使用它。防止这种情况的唯一方法是强制用户使用指针。

typedef struct edge *edge_t;

编译器知道指针的大小,因此它知道需要为它分配多少空间。