błąd: wskaźnik do niekompletnego typu klasy jest niedozwolony


W tym momencie jestem zaskoczony implementacją drzewa trójskładnikowego:
#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;
}

Kiedy przesuwam ikonę myszy obok
p
, pokazuje mi kolor czerwony i błąd:
pointer to incomplete class type is not allowed

Moje pytanie brzmi dokładnie, czym jest niekompletna klasa? Proszę, pomóż mi, dzięki.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

niekompletna klasa (lub typ) to typ zadeklarowany do przodu, ale niezdefiniowany. Tak jak Twój
tnode
.
Prawdopodobnie powinieneś zamienić
node
na
tnode
jako znacznik struktury w twoim przykładzie, aby uzyskać to, czego chcesz.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wpisałeś
Tptr
jako
struct tnode *
, ale
tnode
jest niezdefiniowane i nawet nie zostało zadeklarowane. Być może zamiast tego chciałeś nazwać swoją strukturę
node
tnode
?
A tak przy okazji, czy istnieje łatwy sposób, aby temu zapobiec w przyszłości ...
typedef struct tnode {
...
} Tnode, *Tptr;

W tym momencie
Tptr
jest zawsze aliasem odpowiedniego typu, nawet jeśli zmienisz nazwę
tnode
na inną.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

„Niekompletny typ klasy” zakłada, że ​​Twój kompilator uważa, że ​​jest to kod C ++, a nie kod C, ponieważ C nie ma klas.
Zwróć uwagę, że linia 5 sprawia, że ​​
Tptr
jest nazwą wskaźnika
struct tnode *
do struktury o nazwie „tnode”, a nie „node”, ale „tnode”, małe litery t, node. Linia 6 uruchamia typedef, a następnie rozpoczyna definiowanie struktury o nazwie „node”, bez „t”, tylko „node”. Linia 11. kończy definicję „węzła struktury”, a następnie podaje nazwę wcześniejszej definicji typu: „Tnode”, wielkie litery T, węzeł.
W tej chwili masz cztery różne nazwy: Tptr, typ tnode, typ tnode i node. Ten z małą literą „t” nigdy nie został „ukończony”, więc jest „typem niepełnym” (ale nie klasą, ponieważ C nie ma klas).

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się