如何在结构中制作交叉指针
How to make cross pointers in structs
所以这是我的问题,我想创建一个图形数据库。我的概念是一个节点(代码中的类型为 "Vrtc"。它将包含一个 (int) id、一个 (char*) 字符串(称为 "str")和一个列表(l_est) 进出路径。
该列表将包含 "array" 个指向节点的指针、列表中的节点数量以及最大节点数。
typedef struct Vrtc
{
int id;
char *str;
l_est *pathsIn;
l_est *pathsOut;
} Vrtc;
typedef struct l_est{
Vrtc **Vert;
int qtdElem;
int maxElem;
} l_est;
如您所知,节点内部会出现“Unknow type/Type undeclared”的问题。如果可能的话,我希望任何人都可以给出如何做的提示。
你必须使用 forward declaration:
typedef struct l_est l_est;
typedef struct {
int id;
char *str;
l_est *pathsIn, *pathsOut;
} Vrtc;
typedef struct l_est {
Vrtc **Vert;
int qtdElem, maxElem;
} l_est;
struct l_est
的第一个类型定义是所谓的 "incomplete type"。此类型可能不能用于变量或与sizeof
一起使用,但它可以用于声明指针。
不完整的类型稍后可能会被 "complete type" 覆盖,而不会引起编译器的抱怨。
可以在其他语言(例如 Pascal)中找到类似的解决方案。
所以这是我的问题,我想创建一个图形数据库。我的概念是一个节点(代码中的类型为 "Vrtc"。它将包含一个 (int) id、一个 (char*) 字符串(称为 "str")和一个列表(l_est) 进出路径。 该列表将包含 "array" 个指向节点的指针、列表中的节点数量以及最大节点数。
typedef struct Vrtc
{
int id;
char *str;
l_est *pathsIn;
l_est *pathsOut;
} Vrtc;
typedef struct l_est{
Vrtc **Vert;
int qtdElem;
int maxElem;
} l_est;
如您所知,节点内部会出现“Unknow type/Type undeclared”的问题。如果可能的话,我希望任何人都可以给出如何做的提示。
你必须使用 forward declaration:
typedef struct l_est l_est;
typedef struct {
int id;
char *str;
l_est *pathsIn, *pathsOut;
} Vrtc;
typedef struct l_est {
Vrtc **Vert;
int qtdElem, maxElem;
} l_est;
struct l_est
的第一个类型定义是所谓的 "incomplete type"。此类型可能不能用于变量或与sizeof
一起使用,但它可以用于声明指针。
不完整的类型稍后可能会被 "complete type" 覆盖,而不会引起编译器的抱怨。
可以在其他语言(例如 Pascal)中找到类似的解决方案。