0

我的库中有几个结构:边缘、顶点、图形。我想向用户隐藏该结构的主体(用户必须使用 API),所以在头文件(例如 edge.h)中我刚刚放了:

typedef struct edge edge_t;

边缘结构的定义在 edge.c

struct edge {...};

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

vertex_t v;
v.some_attribute = x;

现在我得到了指向不完整类型错误的取消引用指针,是否可以解决这个问题?是否有任何其他选项对所有结构元素使用访问器(如用户)?

4

2 回答 2

5

如果您需要使用来自其他源文件的结构,它们需要结构的完整定义。所以解决方案是也放入struct edge { /* ... */ }头文件,并在需要时包含头文件。

于 2012-04-20T10:41:41.380 回答
2

Joachim Pileborg 是正确的。

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

typedef struct edge *edge_t;

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

于 2012-04-20T10:45:36.447 回答