erreur: pointeur vers incomplète type de classe n'est pas autorisé
Je suis bloqué à cette étape, la mise en œuvre d'un arbre ternaire:
#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;
}
Quand je bouge la souris de l'icône près de l' p
, il me montre une couleur rouge, et de l'erreur:
pointer to incomplete class type is not allowed
Ma question est exactement ce qu'est une classe incomplète? S'il vous plaît aidez-moi, merci.
- Vous avez oublié de définir
struct tnode
. Aussi, êtes-vous sûr que vous avez un compilateur C? - j'ai visual c ++ 2010 et que je sache,il prend en charge c ainsi
- C+? Si vous voulez dire que Visual C++, qui n'est pas un vrai compilateur C. Vous pourriez encore être en mesure de pirater quelque chose, mais je dis juste qu'un vrai C réponse ne sera pas vous aider avec ce compilateur.
Vous devez vous connecter pour publier un commentaire.
Vous avez typedef avais
Tptr
comme unstruct tnode *
, maistnode
n'est pas défini ou encore déclaré. Peut-être que vous avez voulu dire le nom de votrenode
structtnode
à la place?BTW, il ya un moyen facile de faire que cela se produise dans le futur...
À ce point,
Tptr
est toujours un alias pour le type correct, même si vous changez detnode
nom à quelque chose d'autre.incomplète de la classe (ou le type) est le type qui est à l'avant-déclarée, mais n'est pas définie. Tout comme votre
tnode
.Probablement que vous devez remplacer
node
partnode
que le tag de la structure dans votre exemple, à obtenir ce dont vous avez besoin."incomplets de classe de type" suggère que votre compilateur croit que c'est du code C++ plutôt que du code C, puisque C n'a pas de classes.
Noter que la ligne 5 permet
Tptr
un nom pourstruct tnode *
—pointeur vers une struct nommé "tnode", pas "nœud" mais "tnode", un t minuscule, nœud. Ligne 6 commence un typedef, puis commence à la définition d'une structure nommée "nœud", pas de "t", juste "nœud". La ligne 11 se termine au large de la définition de "struct noeud", et donne ensuite un nom pour le plus tôt typedef: "Tnode", T majuscule, nœud.Vous avez quatre noms différents, ici et maintenant: Tptr, Tnode, tnode, et le nœud. L'un avec une minuscule "t" n'a jamais été "terminé", c'est donc un "type incomplète" (mais pas de classe, parce que C n'a pas de classes).