ошибка: указатель на неполный тип класса не допускается - PullRequest
0 голосов
/ 11 марта 2012

Я поставлен в тупик на этом шаге при реализации троичного дерева:

#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 ]

1 голос
/ 11 марта 2012

Вы напечатали Tptr как struct tnode *, но tnode не определено или даже не объявлено. Возможно, вы хотели назвать вместо node struct tnode?

Кстати, есть простой способ предотвратить это в будущем ...

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

В этот момент Tptr всегда является псевдонимом правильного типа, даже если вы измените имя tnode на другое.

1 голос
/ 11 марта 2012

«неполный тип класса» предполагает, что ваш компилятор считает, что это код C ++, а не код C, поскольку в C нет классов.

Обратите внимание, что строка 5 делает Tptr именем для struct tnode * -указатель на структуру с именем "tnode", не "node", а "tnode", строчная буква t, узел.Строка 6 запускает typedef, затем начинает определять структуру с именем «узел», без «t», просто «узел».В строке 11 заканчивается определение «struct node», а затем указывается имя для более раннего определения типа: «Tnode», прописные буквы T, node.

Теперь у вас есть четыре разных имени: Tptr, Tnode, tnodeи узел.Тот, который в нижнем регистре "t" никогда не был "завершен", поэтому это "неполный тип" (но не класс, потому что C не имеет классов).

1 голос
/ 11 марта 2012

неполный класс (или тип) - это тип, который объявлен в прямом порядке, но не определен.Так же, как ваш tnode.Возможно, вы должны заменить node на tnode в качестве тега структуры в вашем примере, чтобы получить то, что вам нужно.

...