1

リンクされたリストを複数の .c ファイルでグローバルに利用できるようにしたいと考えています。

これを行う方法を読みましたが、問題の原因を特定できません。

LinkedList.h で extern を使用して変数を宣言します。

extern LinkedList* canQueue;

次に main.c で、変数を LinkedList.c の関数に次のように送信して初期化します。

LinkedList *canQueue=createList();

これは LinkedList.c の create 関数です。

LinkedList* createList() /*creates empty linked list*/
  {
    LinkedList* myList;
    myList = malloc(sizeof(LinkedList));
    myList->head = NULL;
    return myList;
  }

次に、別のファイル cpu.c で canQueue を使用します。cpu.c に LinkedList.h を含めたので、この時点で、私が知っているリンク リストはここで利用できるはずです。しかし、アクセスしようとすると、エラーが発生します。

undefined reference to 'canQueue'

私は何かを逃したか、何か間違ったことをしましたか?

4

2 に答える 2

1

初期化時にグローバル変数に定数を割り当てる必要があります。returnまた、関数は定数とは見なされません。したがって、次のようにエラーが表示されます。

 LinkedList *canQueue=createList();

編集私はあなたが代わりにポインタ*canQueueを宣言して初期化したことを見逃していました。それはまさに a の定義に反します。function scopefile scopeglobal variableLinkedList *canQueue=createList();

     Initializer element not constant

オブジェクトはファイル スコープで「宣言」されるため、静的な保存期間があります。静的ストレージ期間のオブジェクトの初期化子は、定数式でなければなりません。関数呼び出しの結果は定数式ではありません

于 2013-05-03T07:36:07.307 に答える