【发布时间】:2015-03-20 17:08:41
【问题描述】:
我知道这个问题已经过时了,但我似乎无法理解我的代码有什么问题。
我有一个带有以下struct tree 的tree.c 文件,该文件包含一个头文件,其中声明了指向此类结构的指针:
树.c
#include "tree.h"
typedef struct tree
{
char desig[200];
int num;
tree_ptr left, right, subtree;
} Tree;
树.h
#ifndef ___TREE_H___
#define ___TREE_H___
typedef struct tree *tree_ptr;
#endif
当我尝试在另一个源文件中访问此结构的某些实例时,编译器给我“取消引用指向不完整类型的指针”错误:
insert(..., instance->subtree);
怎么了?
【问题讨论】:
-
也许调用
insert()的代码看到的是typedef,而不是实际的结构? -
最好将你的类型声明移到标题中。
-
当你在
tree.h中包含treeUser.c时,问问你自己:编译器是否在treeUser.c中看到了subtree的任何提及?还是编译treeUser.c时subtree是一个完全未知的概念? -
你是说我应该在结构声明之后包含标题?
-
不要使用以双下划线开头的名称(或者实际上是单下划线)。它们保留供“实现”使用,您会知道您是否正在实现“实现”(但是,提示,如果您不编写 C 编译器及其支持库,那么您就没有实现 '实施”)。