【发布时间】:2023-09-16 19:38:01
【问题描述】:
我正在尝试在 C 中实现树算法。我在完全独立的头文件 (b_tree_ds.h) 中声明了一个外部结构。现在我计划在所有想要使用这个结构的源文件中导入该文件。所以我必须在 header 中使用 extern 声明它。
现在的问题是我也想定义它的 typedef。编译器给出了多个存储类的错误。我该怎么做。
typedef extern struct node {
struct node* left;
struct node* right;
int key; // contains value
}NODE;
实际问题如下,我还是解决不了??? 我最近学习了如何使用带有头文件的多个源文件来使代码可移植和分层。为了做到这一点,我厌倦了使用这个主体创建我的树程序。这是我的文件
b_tree_ds.h - 这将包含树节点数据结构的声明,可以调用实现树的不同功能的各种函数(可能在不同的源文件中)
typedef struct node {
struct node* left;
struct node* right;
int key; // contains value
}NODE;
当我尝试在 typedef extern struct node 中添加 extern 时,它会给出多个存储类的错误,但如果我错过它,我会收到多个定义的错误。
这是我的其他源文件
traverse.h - 包含遍历函数的声明
void traverse_print (NODE* p);
这里我也收到未知标识符 NODE 的错误
traverse.c - 包含对该函数的定义
#include <stdio.h>
#include "b_tree_ds.h"
#include "traverse.h"
void traverse_print(NODE* p)
{
if(p->left != NULL)
{
traverse_print(p->left);
}
if (p->right != NULL)
{
traverse_print(p->right);
}
printf ("\n%d",p->key);
}
最后是 main.c
#include <stdio.h>
#include "traverse.h"
void main()
{
// input
NODE p;
printf("\nInput the tree");
input_tree (&p);
printf("\n\nThe tree is traversing ...\n")
traverse_print(&p);
}
void input_tree (NODE *p)
{
int in;
int c;
NODE *temp;
printf("\n Enter the key value for p: ");
scanf("%d", &in);
p->key =in;
printf ("\n\nIn relation to node with value %d",in);
printf ("Does it have left child (Y/N): ")
if ((c = getchar()) == Y);
{
//assign new memory to it.
temp = (NODE *)malloc(sizeof(NODE));
input_tree(temp);
}
printf ("\n\nIn relation to node with value %d",p->key);
printf ("\nDoes it have right child (Y/N): ")
if ((c = getchar()) == Y);
{
//assign new memory to it.
temp = (NODE *)malloc(sizeof(NODE));
input_tree(temp);
}
}
这是我第一次尝试这种做法,请建议我的程序结构好还是我应该尝试其他方法。
【问题讨论】: