2017-09-26 3 views
0

誰かがユニオンでポインタにアクセスするのを手伝ってもらえますか?[エラー]無効な型引数 ' - >'( 'struct node'を持っています。ここでの私のデータ構造の抜粋です:誰もが私は労働組合内の私のポインタにアクセスする方法に指摘することができCプログラミング:ユニオンでポインタにアクセスする

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; 
} 

場合、それは素晴らしいことです。みんなありがとう。

+0

複数のエラーがあります。初心者のために、あなたが逆参照したときに「一時的」な点はどこですか? –

+2

'typedef struct twoThree {...} * TTT' - ほとんどの場合、ポインタを' typedef'するのは悪い考えです。 –

+0

あなたの問題については、 'U.iNode'は構造体へのポインタではなく、構造体*オブジェクト*なので、矢印演算子' - > 'を使ってメンバーにアクセスしないでください。 –

答えて

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*/** 
     } 

このセクションには、構造の不一致があります。したがって、エラーを示しています。

説明: Tとtempが指し示す2つの構造体が2つあります。elseif(* T) - > U.leaf.keyにアクセスすると、構造体に含まれる(インジケータと構造体のリーフ)。 同じ場合(* temp) - > U.iNode.key1がアクセスされます。これは、tempがタイプの構造体を指し示すことを意味します(インジケーターインジケーターとstruct iNode)。この不一致がエラーの原因です。共用体は、一度にiNodeを構造化するか、構造体の葉を単独で構造化するかのどちらかを可能にします。

関連する問題