C语言 如何访问嵌套在二叉搜索树中的队列中的变量

6ie5vjzr  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(109)
typedef struct {
    int lineNum;
    struct queNode *next;
} queNode;

typedef struct {
    char word[64];
    struct treeNode *left;
    struct treeNode *right;
    struct queNode *front;
    struct queNode *rear;
} treeNode;

所以我尝试通过treeNode(二叉搜索树节点)和front(队列节点)访问lineNum
我尝试了treeNode-〉front-〉lineNum,但是vscode告诉我“不允许指向不完整类类型“struct queNode”的指针”。我该怎么办

vd8tlhqk

vd8tlhqk1#

根本原因是你的结构是未命名的,但是你把它们作为命名的结构来引用,而不是使用typedef。快速解决方法是命名结构。你可以使用与typedef相同的名称,这是很常见的:

typedef struct queNode {
    int lineNum;
    struct queNode *next;
} queNode;

typedef struct treeNode {
    char word[64];
    struct treeNode *left;
    struct treeNode *right;
    struct queNode *front;
    struct queNode *rear;
} treeNode;

你不需要在treeNode定义中使用struct queNode,因为typedef已经存在了,但是如果你想在所有地方都去掉struct前缀,你可以在前面使用typedef结构:

typedef struct queNode queNode;
typedef struct treeNode treeNode;

struct queNode {
    int lineNum;
    queNode *next;
};

struct treeNode {
    char word[64];
    treeNode *left;
    treeNode *right;
    queNode *front;
    queNode *rear;
};

我注意到,根据这个错误消息,看起来你使用的是C编译器,因为C没有引用任何“类”。所以,在C中,你不需要typedef来使用它们,而不需要struct前缀,因为命名的结构与类型名是同义的。
因此,如果您实际使用的是C++编译器,则可以简化为:

struct queNode {
    int lineNum;
    queNode *next;
};

struct treeNode {
    char word[64];
    treeNode *left;
    treeNode *right;
    queNode *front;
    queNode *rear;
};

相关问题