2012-03-11 84 views
0

我在这一步难倒同时实施三叉树:错误:指向不完全类类型是不允许

#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 

我的问题正是什么是不完整的类?请帮助我,谢谢。

+0

你忘了定义'struct tnode'。另外,你确定你有一个C编译器吗? – 2012-03-11 19:21:04

+0

我有visual c + 2010,据我所知,它支持c以及 – 2012-03-11 19:22:30

+1

C +?如果你的意思是Visual C++,那不是一个真正的C编译器。你可能仍然能够解决某些问题,但我只是说,一个真正的C答案不会帮助你编译该程序。 – 2012-03-11 19:23:33

回答

1

您输入了Tptr作为struct tnode *,但tnode未定义或甚至未被声明。也许你的意思是命名你的node struct tnode而不是?

BTW,有一个简单的方法来保持从在未来发生的事情......

typedef struct tnode { 
    ... 
} Tnode, *Tptr; 

在这一点上,Tptr始终是一个别名为正确的类型,即使你改变tnode的名字到别的东西。

+0

是@cHao我修复了它,谢谢 – 2012-03-11 19:27:09

+0

另一个想法是根本不使用指针typedefs,那么就没有机会搞砸了 – 2017-02-25 05:57:32

1

不完整的类(或类型)是正向声明的类型,但未定义。就像你的tnode。 也许你应该用tnode替代node作为你例子中结构的标签来获得你所需要的。

1

“不完整的类类型”表明您的编译器认为这是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没有类)。