2016-05-14 20 views
0

のメンバーのための要求「****」私はリンクリストを形成するために、ポインタを使用して2つの構造体を持っています。エラー:何かない構造体または共用

typedef struct { 
    char *text; 
    int count; 
} *Item; 

typedef struct node { 
    Item item; 
    struct node *next; 
} *link; 

私はこのタイプの上で一連の操作を作成しようとしていますが、私はこの特定の機能に多くの問題があります。

error: request for member ‘text’ in something not a structure or union strcpy(new->item->text, buffer->text);

error: request for member ‘text’ in something not a structure or union new->item->text = (char*) malloc(sizeof(char)*(strlen(buffer->text)+1));

基本的にエラーがbuffer->テキストパス上にあるが、私は過去の時間のためにそれをいじりされてきたし、それで間違っているものを見つけるように見えることはできません。私はおそらく明白な何かを欠いているだろうが、私はそれのまわりで私の耳を巻き戻すことができない。

link new_item(Item* buffer) { 
    link new = (link) malloc(sizeof(struct node)); 
    new->item->text = (char*) malloc(sizeof(char)*(strlen(buffer->text)+1)); 
    strcpy(new->item->text, buffer->text); 
    new->item->count = 1; 
    new->next = NULL; 
    return new; 
} 
+5

メッセージは時々あなたが '' .'どこ使っている意味 - > '使用、またはその逆する必要があります。あるいは、参照のLHSが構造体へのポインタでも構造体へのポインタでもないことを意味します。それがあなたの問題です。参照してください[それはポインタをtypedefすることをお勧めしますか?](http://stackoverflow.com/questions/750178/is-it-a-good-ide-to-typedef-pointers) - 答えは "No"です。このような問題。変数 'buffer'は構造体へのポインタへのポインタです。 '(* buffer) - > text'などを使う必要があります。あるいは、関数を' link new_item(Item buffer) 'に変更する必要があります。 –

答えて

3

問題は、1つのみではなく2段階の間接指定があることです。 Itemstruct {...} *あるが、具体的に、bufferは、Item *型を持ちます。あなたはおそらくちょうどItem bufferItem *bufferを変更したいです。あなたが本当に間接2つのレベルが必要な場合は、textフィールドにアクセスするために(*buffer)->textを行う必要があるだろうが、これはおそらくあなたが望むものではありません。

これは、多くの場合、このようなミスにつながることができますように多くの人々が、using typedef to define pointer typesに対して助言する理由の一つです。

関連する問題