Ошибка: указатель на неполный тип класса недопустим
Я поставлен в тупик на этом этапе при реализации троичного дерева:
#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 не имеет классов).