错误:指向不完全类类型是不允许
我在这一步难倒同时实施三叉树:错误:指向不完全类类型是不允许
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct tnode *Tptr;
typedef struct node
{
char splitchar;
Tptr lokid,eqkid,hikid;
}Tnode;
int research(Tptr p,char *s)
{
if (!p) return 0;
if (*s<p->
}
int main(){
return 0;
}
当我移动靠近p
鼠标图标,它显示了我一个红色和错误:
pointer to incomplete class type is not allowed
我的问题正是什么是不完整的类?请帮助我,谢谢。
您输入了Tptr
作为struct tnode *
,但tnode
未定义或甚至未被声明。也许你的意思是命名你的node
struct tnode
而不是?
BTW,有一个简单的方法来保持从在未来发生的事情......
typedef struct tnode {
...
} Tnode, *Tptr;
在这一点上,Tptr
始终是一个别名为正确的类型,即使你改变tnode
的名字到别的东西。
是@cHao我修复了它,谢谢 – 2012-03-11 19:27:09
另一个想法是根本不使用指针typedefs,那么就没有机会搞砸了 – 2017-02-25 05:57:32
不完整的类(或类型)是正向声明的类型,但未定义。就像你的tnode
。 也许你应该用tnode
替代node
作为你例子中结构的标签来获得你所需要的。
“不完整的类类型”表明您的编译器认为这是C++代码而不是C代码,因为C没有类。
注意,5号线,使Tptr
的名称struct tnode *
终场以一个名为“TNODE”,而不是“点”,而是“TNODE”,小写字母T,节点结构。第6行启动了一个typedef,然后开始定义一个名为“node”的结构,没有“t”,只是“node”。第11行完成“struct node”的定义,然后为较早的typedef提供一个名称:“Tnode”,大写的T节点。
现在您有四个不同的名称:Tptr,Tnode,tnode和节点。小写字母“t”从来没有“完成”,所以它是一个“不完整类型”(但不是类,因为C没有类)。
你忘了定义'struct tnode'。另外,你确定你有一个C编译器吗? – 2012-03-11 19:21:04
我有visual c + 2010,据我所知,它支持c以及 – 2012-03-11 19:22:30
C +?如果你的意思是Visual C++,那不是一个真正的C编译器。你可能仍然能够解决某些问题,但我只是说,一个真正的C答案不会帮助你编译该程序。 – 2012-03-11 19:23:33