C [错误]对成员的请求,其中的指针类型可能是您想要使用的->;?)英国夏令时

C [错误]对成员的请求,其中的指针类型可能是您想要使用的->;?)英国夏令时,c,pointers,binary-search-tree,C,Pointers,Binary Search Tree,我正在尝试从bst中删除节点 (strcmp((*A)->caracterise.nom,Etud.nom)==0)和&(strcmp((*A)->caracterise.prenom,Etud.prenom)==0)和((*A)->caracterise.note==Etud.note)) 我在“*A”中收到了对成员“caracterise”的[Error]请求,该成员的指针类型为“ABR{aka noud*}”(可能您打算使用“->”?) 注:教育对象为学生;noud是节点;特征是学生信息;

我正在尝试从bst中删除节点 (strcmp((*A)->caracterise.nom,Etud.nom)==0)和&(strcmp((*A)->caracterise.prenom,Etud.prenom)==0)和((*A)->caracterise.note==Etud.note))

我在“*A”中收到了对成员“caracterise”的[Error]请求,该成员的指针类型为“ABR{aka noud*}”(可能您打算使用“->”?)

注:教育对象为学生;noud是节点;特征是学生信息;nom prenom note是姓名、姓氏gpa;fG为左bst;fD是正确的bst;美国广播公司是英国广播公司

struct etudiant
{
char nom[13]; 
char prenom[13];
float note;
};

struct noud
{
etudiant caracterise;
struct noud*fG;
struct noud*fD;
};

typedef struct noud*ABR;

void supprimer(ABR** A, etudiant Etud){
if ((strcmp((*A)->caracterise.nom , Etud.nom) == 0) && (strcmp((*A)->caracterise.prenom , Etud.prenom) == 0) && ((*A)->caracterise.note == Etud.note)) {
    //if ((test(*A, Etud) == 0)&& (*A->caracterise.note == Etud.note)){
    ABR* a;
    a = (ABR*)malloc (sizeof(noud));
    a = (*A)->fD ;
    ABR* b;
    b = (ABR*)malloc (sizeof(noud));
    if ( a != NULL ) {
        if ( a->fG != NULL ) {
            while ( a->fG->fG != NULL ) {
                a = a->fG ;
            }
            b = a->fG ;
            b->fG = (*A)->fG ;
            a->fG = b->fD ;
            b->fD = (*A)->fD;
            a = (*A);
            (*A) = b ;
            free(a);
        }else{
            a->fG = (*A)->fG ;
            free(*A);
            (*A) = a ;
        }
    }else{
        a = *A ;
        (*A) = (*A)->fG ;
        free(a);
    }
}else{
    if ( v.priorite > (*A)->val.priorite ) {
        supprimer(&(*A)->fD, Etud);
    }else{
        supprimer(&(*A)->fG, Etud);
        }
    }
}

A是
ABR**
,所以
struct noud***
,所以
(*A)
struct noud**
而不是
struct noud*
(*A)->caracterise
是错误的(但是
(**A)->caracterise
合法的)

当你把指针隐藏在typedef后面时,就会得到这样的结果
A
属于
noud***
类型,因此
*A
属于
noud**
类型,您无法使用
->
访问该类型。与错误无关,赋值
A=malloc(sizeof(noud))
直接后跟
A=(*A)->fD
将导致内存泄漏。这称为karma。尝试用不太复杂的数据类型重写此程序。使用直观的变量名。删除指针取消引用以支持
[]
索引。