是什么导致头文件中的C中的标识符错误?
我是 C 新手,似乎对头文件的工作方式有误解。为简单起见,我有三个文件:tree.h、lib.c 和 main.c
在 tree.h 中,我有
struct Node
{
void* item;
Node** nodes;
};
struct Tree
{
Node* tree_root;
int depth, item_size;
};
void initializeTree(Tree*, int);
我的理解是,这个 initializeTree 方法是一个函数“签名”,并且每当我在 lib.c 或任何其他包含头文件 tree.h 的 .c 文件中调用它时,编译器都会知道一些关于该函数的信息. 但是,在 lib.c 中我有错误“标识符树未定义”。
#include <tree.h>
void initializeTree(Tree* tree, int item_size)
是什么导致了这个错误?编译器是否无法从包含的头文件中“看到”树结构?
回答
没有Tree,只有一个struct Tree(a)。虽然 C++ 允许缩写形式,但 C 不允许。
在C ++中,struct是在一个微小的变化class和它们是两种类型的访问,而不的struct/class前缀。然而,C 中的规则是不同的,因为尽管这两种语言有相似之处和历史,但它们现在是非常不同的野兽。
因此,在 C 中,您必须使用完整的类型名称:
struct Tree { blah blah };
void initializeTree(struct Tree *, int);
或者typedef这样:
typedef struct sTree { blah blah } Tree; // struct sTree =~ Tree
void initializeTree(Tree *, int);
(a)顺便说一下,你有同样的问题Node。