10

単語を並べ替えるバブルソート機能を実装しています。スワップ機能語は完全に問題ありませんが、エラーを取得できません。オンラインで検索しようとしましたが、何か役に立つものを得ることができませんでした。エラーが発生する場所をマークしました。

お手伝いありがとう。

void sortWord (struct node** head) {
    struct node* temp  = (*head);
    struct node* temp2 = (*head);

    int i;
    int j;
    int counter = 0;
    while(temp != NULL)
    {
        temp = temp->next; //<-- this is where i get the error.
        counter++;
    }
    for( i = 1; i<counter; i++)
    {
        temp2=(*head);
        for(j = 1; j<counter-1;j++)
        {
            if(wordCompare(temp2,nodeGetNextNode(temp2))>0)
            {
                swap(head,temp2,nodeGetNextNode(temp2));
                continue;
            }
        }
        temp2 = nodeGetNextNode(temp2);
    }
}
4

2 に答える 2

16

このエラーは、struct前方宣言されているが定義されていないを使用しようとした場合に発生します。そのような構造体へのポインタを宣言して操作することは絶対にOKですが、コンパイラがアクセスを実行するためにそれらのサイズとレイアウトを知る必要があるため、それらを逆参照しようとすることはOKではありません。

struct node具体的には、あなたの場合、コンパイラはそれが持っていることを知らないnextので、

temp->next

コンパイルされません。

この問題を修正するには、関数をstruct node定義するコンパイルユニットにの定義を含める必要があります。sortWord

于 2013-02-25T14:23:09.313 に答える
5

次の行を置き換える必要があります。

temp = temp->next;

その行で:

temp = nodeGetNextNode(temp);

その理由は、このコードでは、の構造について何も知らないためですnodenodeGetNextNodeそれがtemp2の関数を使用した理由だと思います。一時的にも使用する必要があります。

于 2013-02-25T14:29:40.367 に答える