错误:不允许指向不完整类类型的指针

时间:2012-03-11 19:16:27

标签: c++ c data-structures ternary-tree

在实施三元树时,我对此步骤感到难过:

#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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您已将Tptr键入为struct tnode *,但tnode未定义或甚至未声明。也许您打算将node结构tnode命名为?

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

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

此时,Tptr始终是正确类型的别名,即使您将tnode的名称更改为其他名称也是如此。

答案 2 :(得分:1)

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

注意第5行使Tptr成为struct tnode *的名称 - 指向名为“tnode”的结构的指针,而不是“node”而是“tnode”,小写字母t,node。第6行启动一个typedef,然后开始定义一个名为“node”的结构,没有“t”,只是“node”。第11行完成了“struct node”的定义,然后为早期的typedef提供了一个名称:“Tnode”,大写字母T,节点。

现在你有四个不同的名字:Tptr,Tnode,tnode和node。具有小写“t”的那个从未被“完成”,所以它是“不完整类型”(但不是类,因为C没有类)。