从其他源文件访问结构

时间:2013-02-19 21:33:28

标签: c struct

我有两个文件:getParams.ctree.c

我要做的是将tnode中的tree.c声明为getParams.c

我不记得如何正确包含其他源文件中的代码。

getParams.c

#include <stdlib.h>

int main(int argc, char *argv[]) {

tnode *doublyLinked;

addtree(doublyLinked, argv[1]);

return 0;
}

tree.c

/*
 *  Tree routines from Kernighan and Ritchie
 *  Chapter 6.
 */
#include <stdio.h>
#include <string.h>

#define EOS '\0'
#define LETTER 'a'
#define DIGIT '0'

#define MAXWORD 20


struct tnode{         /* the basic node */
     char *word;      /* points to the text */
     int count;           /* number of occurrences */
     struct tnode *left;  /* left child */
     struct tnode *right; /* right child */
};

main(){           /* word frequency count */
     struct tnode *root, *addtree();
     char word[MAXWORD];
     int t;

 root = NULL;
 while((t=getword(word, MAXWORD)) != EOF)
 if (t == LETTER)
     root = addtree(root,word);
 treeprint(root);
} 

... more code

我得到的错误

gcc getParams.c tree.c -o getParams

getParams.c: In function ‘main’:

getParams.c:5:2: error: unknown type name ‘tnode’

我可以收到你的帮助吗?

2 个答案:

答案 0 :(得分:2)

予。您应该在单独的头文件中定义tnode结构类型,并将该头文件包含在两个实现文件中。

II。这是C,而不是C ++。 struct tnode { };不会自动定义类型名称tnode - 您必须手动执行此操作:

typedef struct tnode {
    /* foo */
} tnode;

答案 1 :(得分:0)

您需要在共享标头中声明tnode,然后使用以下内容包含它:

#include "myheader.h"