是什么导致头文件中的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


以上是是什么导致头文件中的C中的标识符错误?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>