2016-04-02 17 views
0

アルファベット順にリンクリストに挿入するために、文字をデータ部分と比較しようとしていますが、どうしましたか?リンクされたリストと不完全なクラス型へのポインタ

私は次のことをやろうとしている
typedef struct{ 
    char data; 
    struct list_node *next; 
}list_node; 

typedef struct{ 
    list_node *head; 
}list; 

void input_char(list *my_list, char x) 
{ 
    list_node *node = (list_node*)calloc(1, sizeof(list_node)); 
    list_node *tmp = my_list->head; 
    node->data = x; 

    if (tmp == NULL) 
     my_list->head = tmp; 
    else if (tmp->next == NULL) 
    { 
     if (x < tmp->data) 
     { 
      node->next = tmp; 
      my_list->head = node; 
     } 
     else 
      tmp->next = node; 

     tmp = tmp->next; 
    } 
    else 
    { 
     if (x < tmp->next->data) 
    // This following line says "Error, Pointer to incomplete type is not allowed. 
     { 
      node->next = tmp->next; 
      tmp->next = node; 
     } 
     tmp = tmp->next; 
    } 
} 
+0

Cはクラスをサポートしていません。 C++としてコンパイルする場合は、タグを変更します。 See [ask]。どのようなエラーメッセージが表示されますか?どこ? – Olaf

+0

@ S:C++では、 'struct'はクラス型です。あなたはタイトル( "リンクされたリストと不完全**クラス**タイプへのポインタ")を読んだことがありますか? – Olaf

+1

タイプ。 alias( 'typedef'キーワードで導入されたもの)は、構造体タグ(構造体の名前)と同じではありません。したがって、構造体タグが型名と同じ名前を持たない限り、 'struct some_typedef_name * foobar'のようなことは今までにはうまくいきません。 –

答えて

3

変更

typedef struct{ 
    char data; 
    struct list_node *next; 
}list_node; 

typedef struct list_node{ 
    char data; 
    struct list_node *next; 
}list_node; 

へのあなたのコンパイラは struct list_nodeが何であるかを知らないので、あなたはそれを宣言しなければなりません。

+0

問題を修正しました。ありがとうございます。私はそれをできるだけ早く答えとして受け入れます。 – Dannz

関連する問題