私はヘッダーファイルを作成し、リンクされたリストを作成する方法について学び始めながら実装を分離する方法を学んでいます。私はlinked_list.h
、linked_list.c
、およびmain.c
ファイルを作成しました。 main.c
ポインタを作成しない限り、struct typedef'edを作成しようとするとエラーが発生し、それが動作します。私はなぜこれが理解できないのですか?誰かがこれを説明してもらえますか?私の構造体をポインタとして宣言しなければならないのはなぜですか?
linked_list.h
:
#ifndef LINKED_LIST_H_
#define LINKED_LIST_H_
typedef struct ListNode_ ListNode;
#endif // LINKED_LIST_H_
linked_list.c
:
#include <stdio.h>
#include <stdlib.h>
#include "linked_list.h"
struct ListNode_ {
int data;
ListNode *next;
};
main.c
:
#include <stdio.h>
#include <stdlib.h>
#include "linked_list.h"
int main() {
ListNode node1; // why can't I do this?
ListNode *node2; // but this works
}
'main.c'に' struct ListNode_'の定義が含まれていないので、その翻訳単位でその型のオブジェクトを作成することはできません。 –
私は初心者です。以前は用語翻訳ユニットについて聞いたことがありません。正しく動作させるために何か変更する必要がありますか? ListNodeをメインでポインタを使って作成できますが、それがないとできないのはなぜですか? – Austin
'ListNode_'構造体定義を' .h'ファイルに移動します。ヘッダーファイルにどのような情報を格納する必要があるかについては、[この回答](http://programmers.stackexchange.com/a/167751)を参照してください。 – Jezor