2017-09-26 1 views
0

Kann mir bitte jemand helfen mit dem Zugriff auf Zeiger mit in einer Union, bekomme ich immer ein [Error] ungültigen Typ Argument von '->' (haben 'struct node'). Hier ist ein Ausschnitt mit meiner Datenstruktur in ihm:C-Programmierung: Zugriff auf Zeiger in einer Union

typedef enum{LEAF,INODE}indicator; 

typedef struct twoThree{ 
    indicator indic; 
    union{ 
     struct L{ 
      int key; 
     }leaf; 
     struct node{ 
      int key1,key2; 
      struct twoThree *LC,*MC,*RC; 
     }iNode; 
    }U; 
}*TTT; 


void insertElem(TTT *T, int elem) 
{ 
    TTT *temp; 

    if(*T==NULL){ 
     *T=initTree(); 
     (*T)->indic = LEAF; 
     (*T)->U.leaf.key = elem; 
    }else if((*T)->indic == LEAF){ 
     if(elem < (*T)->U.leaf.key){ 
      (*temp)=initTree(); 
      (*temp)->indic = INODE; 
      (*temp)->U.iNode.key1 = elem; 

      **(*temp)->U.iNode->LC = *T; /*This is my problem"->LC" part*/** 
     } 
    } 
} 

TTT initTree() 
{ 
    TTT T; 
    T=(TTT)malloc(sizeof(struct twoThree)); 
    if(T!=NULL){ 
     printf("Initialization of tree was successful.\n"); 
    }else{ 
     printf("Failed initialization of tree.\n"); 
    } 

    return T; 
} 

Wenn jemand auf darauf hinweisen könnte, wie ich meine Zeiger innerhalb der Union zugegriffen wird, das wäre toll. Danke Leute.

+0

Sie haben mehrere Fehler. Für den Anfang, wo "Temp" zeigen, wenn Sie es dereferenzieren? –

+2

'typedef struct twoThree {...} * TTT' - in den meisten Fällen ist es eine schlechte Idee," typedef "-Zeiger zu schreiben. –

+0

Wie Ihr Problem ist 'U.iniode' kein Zeiger auf eine Struktur, es ist eine Struktur * Objekt *, und deshalb sollten Sie den Pfeiloperator' -> 'nicht verwenden, um auf seine Mitglieder zuzugreifen. –

Antwort

0
else if((*T)->indic == LEAF){ 
     if(elem < (*T)->U.leaf.key){ 
      (*temp)=initTree(); 
      (*temp)->indic = INODE; 
      (*temp)->U.iNode.key1 = elem; 

      **(*temp)->U.iNode->LC = *T; /*This is my problem"->LC" part*/** 
     } 

In diesem Abschnitt wird eine Struktur Mismatch, daher ist es die Fehler zeigt.

Erläuterung: Es gibt zwei zwei Strukturen, auf die T und temp zeigen. Im Fall elseif (* T) -> U.leaf.key wird zugegriffen, was bedeutet, dass die Struktur (Indikator indic und struct leaf) enthält. Im gleichen Fall (* temp) -> U..iNode.key1 wird zugegriffen, was bedeutet, dass die temp-Punkte der Struktur des Typs (Indikator indic und struct iNode) entsprechen. Diese Abweichung ist der Grund für den Fehler. Als union wird die Existenz entweder struct iNode oder struct leaf alleine erlauben.

Verwandte Themen