如何在.C文件中声明结构?

如何在.C文件中声明结构?,c,struct,header,structure,declare,C,Struct,Header,Structure,Declare,我必须用C实现一个链表,根据项目规范,必须在我的头文件中创建以下结构: typedef struct node { char *string; struct node* next; } typedef struct { node *head; /* could have been struct node* as well */ node *tail; } list; 现在,如何在.C文件中提供这些信息?我已经包含了头文件,但当我尝试调用myList.head(例如)时,我不断收到错

我必须用C实现一个链表,根据项目规范,必须在我的头文件中创建以下结构:

typedef struct node {
char *string;
struct node* next;  
} 


typedef struct {
node *head;  /* could have been struct node* as well */
node *tail;
} list;

现在,如何在.C文件中提供这些信息?我已经包含了头文件,但当我尝试调用myList.head(例如)时,我不断收到错误,说明我试图对非结构或联合的对象执行操作,因此如何修复此问题?

在第一个结构后需要一个分号。
或者去掉typedef,或者给它起个名字。

在第一个结构后面需要一个分号。 要么扔掉你的typedef,要么给它起个名字。

你的typedef错了。语法是:

typedef [some_type_definition] [type_name];
类型定义如下:

struct node {
    char *string;
    struct node* next;
};
因此,您需要在它前面加上typedef,并在分号之前加上node。这将允许您使用node或struct node引用结构

对于列表,您没有命名结构,但键入了定义。这意味着您不能将其称为struct list-您必须使用just list。如果需要,可以命名结构。

您的typedef错误。语法是:

typedef [some_type_definition] [type_name];
类型定义如下:

struct node {
    char *string;
    struct node* next;
};
因此,您需要在它前面加上typedef,并在分号之前加上node。这将允许您使用node或struct node引用结构



对于列表,您没有命名结构,但键入了定义。这意味着您不能将其称为struct list-您必须使用just list。如果需要,您可以为结构命名。

typedef'd名称也丢失了。缺少分号不在实际代码中,当我在此处键入代码时也是一个错误typedef'd名称也丢失了。缺少分号不在实际代码中,据我所知,在此处键入代码时是一个错误,C是C++文件的传统扩展,而不是C文件,至少在使用GCCH头文件时,应该称为MyList.h,而不是.Head。对于进一步的问题,请始终包括编译器的实际错误消息。释义会丢失太多信息。@Kay头文件应该称为myList.h,而不是.head-嗯,很明显,“myList”是list*,不是文件名,head是list的一个成员,不是文件扩展名,OP需要myList->head。myList->head将是一个有问题的文件名。@AdelQodmani不适用于主操作系统,它忽略了文件名的大小写。@JimBalter Windows保留文件名的大小写。这就是编译器所需要的。我解释了MyList.Head错误。但是,我知道,C是对C++文件的传统扩展,而不是C文件,至少在使用GCCH头文件时,应该称为MyList.h,而不是.Head。对于进一步的问题,请始终包括编译器的实际错误消息。释义会丢失太多信息。@Kay头文件应该称为myList.h,而不是.head-嗯,很明显,“myList”是list*,不是文件名,head是list的一个成员,不是文件扩展名,OP需要myList->head。myList->head将是一个有问题的文件名。@AdelQodmani不适用于主操作系统,它忽略了文件名的大小写。@JimBalter Windows保留文件名的大小写。这就是编译器所需要的。虽然我对myList.head的解释是错误的。但我的问题是,如果所有这些都在我的头文件中,我如何在实际的c文件中准确地使用结构?在我的c文件中,我有一些方法在列表和节点中传递,但当我尝试访问列表内容(例如传入的列表的头)时,我被告知该结构不是一个结构。。。就是这样,你只需要包含标题。如果您正确地声明了类型,那么当您定义该类型的变量或指针时,一切都会很好。如果您有列表myList,则可以访问myList.head。如果您有list*myList,您可以通过myList->head访问。啊,是的,这很有意义。知道为什么我这样做时会出现“无效初始值设定项”错误吗?int llSizelist*myList{node decoy=myList->head;是的,您正在尝试使用node*指针初始化node的一个实例。如果要复制整个节点,您必须执行node decoy=*myList->head。如果您只想复制指针,您必须执行node*decoy=myList->head。但我的问题是,如果所有这些都在我的头文件中,如何准确地使用st在我的实际c文件中,我在c文件中,有一些方法被传递到列表和节点中,但是当我试图访问列表内容时,例如,传递进来的列表的头,我被告知该结构不是一个结构,它只是包含了头。如果你正确声明了类型,那么当你定义了在键入时,一切都会很好。如果您有列表myList,则可以访问myList.head。如果您有列表*myList,则可以访问myList->head。啊,是的,这很有意义。知道吗
为什么在执行此操作时出现“无效初始值设定项”错误?int llSizelist*myList{node decoy=myList->head;是的,您正在尝试使用node*指针初始化node的实例。如果要复制整个节点,必须执行node decoy=*myList->head。如果只想复制指针,必须执行node*decoy=myList->head。