0

リンクリストであるCで構造体を作成しようとしています。私は何がうまくいかないのか本当に分かりません。私のエラーは次のとおりです。

linked.c:6:2: error: unknown type name ‘linkedList’
linked.c: In function ‘makeList’:
linked.c:30:2: error: ‘first’ undeclared (first use in this function)
linked.c:30:2: note: each undeclared identifier is reported only once for each function it appears in
linked.c: In function ‘addToList’:
linked.c:36:9: error: used struct type value where scalar is required
linked.c:43:13: error: incompatible types when assigning to type ‘int *’ from type ‘linkedList’

誰かが何が間違っているかを見て、それを私に説明できれば、それは大歓迎です。私のコードは以下です。

#include <stdio.h>

typedef struct linkedList
{
        int first;
        linkedList* rest;
} linkedList;

linkedList makeList(int a, int b, int c);
void addToList(linkedList* ll, int a);

int main()
{
        linkedList ll = makeList(1,3,5);
        addToList(&ll, 7);
        addToList(&ll, 9);
        return 0;
}

linkedList makeList(int a, int b, int c)
{
        linkedList ll;
        ll.first = a;
        linkedList second;
        second.first = b;
        linkedList third;
        third.first = c;
        third.rest = NULL;
        second.rest = &c;
        first.rest = &b;
        return first;
}

void addToList(linkedList* ll, int a)
{
        while (*ll)
        {
                if (ll->rest == NULL)
                {
                    linkedList newL;
                    newL.first = a;
                    newL.rest = NULL;
                    ll->rest = newL;
                    break;
            } else
            {
                    continue;
            }
    }
}
4

4 に答える 4

4

C コンパイラにはtypedef、. いくつかのオプションがあります。linkedListstruct

typedef struct linkedList
{
    int first;
    struct linkedList* rest;
} linkedList;

または:

typedef struct linkedList linkedList;  // C allows this forward declaration

struct linkedList
{
    int first;
    linkedList* rest;
};

これがあなたの出発点です。

その他の問題には、次のものが含まれますが、これらに限定されません。

  • 関数makeListは変数を参照していますfirstが、どこにも定義されていないようです。
  • ll->rest = newL;( )linkedListへのポインターに型を割り当てた場合、値へのポインターに値を割り当てることはできません。コンパイラのエラー メッセージには、これが示されています。それは...しかし...linkedListlinkedList *linked.c:43:13:...ll->rest = &newL;
  • newLfunction に対して LOCAL であるaddToListため、コードがそのブロックを離れると範囲外になるため、そのアドレスを永続的なリスト項目に割り当てることはできません。
  • たとえば、へのポインタを保持する変数にaddToList、整数へのポインタを割り当てています。linkedListsecond.rest = &c;
于 2013-10-02T19:18:35.300 に答える