Ошибка: указатель на неполный тип класса недопустим

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

#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 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам