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

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

4

3 回答 3

1

不完整的类(或类型)是前向声明但未定义的类型。就像你的tnode. 可能您应该将nodeby替换tnode为示例中的结构标记以获得所需的内容。

于 2012-03-11T19:22:51.953 回答
1

您已将 typedef定义Tptrstruct tnode *,但tnode未定义甚至未声明。也许您打算命名您的node结构tnode

顺便说一句,有一种简单的方法可以防止这种情况在未来发生......

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

在这一点上,Tptr始终是正确类型的别名,即使您将tnode' 名称更改为其他名称。

于 2012-03-11T19:24:16.793 回答
1

“不完整的类类型”表明您的编译器认为这是 C++ 代码而不是 C 代码,因为 C 没有类。

请注意,第 5 行Tptr命名了struct tnode *— 指向名为“tnode”的结构的指针,而不是“node”而是“tnode”,小写的 t,node。第 6 行开始一个 typedef,然后开始定义一个名为“node”的结构,没有“t”,只有“node”。第 11 行完成了“struct node”的定义,然后为之前的 typedef 提供了一个名称:“Tnode”,大写 T,node。

您现在在这里有四个不同的名称:Tptr、Tnode、tnode 和 node。带有小写“t”的那个从来没有被“完成”过,所以它是一个“不完整的类型”(但不是类,因为 C 没有类)。

于 2012-03-11T19:26:32.010 回答