C要求结构或联合至少有一个成员
当我试图编译这段代码时,我从编译器那里得到了一堆奇怪的错误 我只是想写一个基本的链表,头文件在自己运行时编译得很好,但是当我编译c文件时,一切都崩溃了 linkedlist.hC要求结构或联合至少有一个成员,c,compiler-errors,C,Compiler Errors,当我试图编译这段代码时,我从编译器那里得到了一堆奇怪的错误 我只是想写一个基本的链表,头文件在自己运行时编译得很好,但是当我编译c文件时,一切都崩溃了 linkedlist.h typedef struct Data { char *title; } Data; typedef struct LinkedList { LinkedList *next; Data *data; } LinkedList; LinkedList *createnew(void); voi
typedef struct Data
{
char *title;
} Data;
typedef struct LinkedList
{
LinkedList *next;
Data *data;
} LinkedList;
LinkedList *createnew(void);
void destroylist(LinkedList *old);
Data *adddata(void);
void destroydata(Data *old);
LinkedList.c
#include <stdlib.h>
#include "linkedlist.h"
LinkedList *createnew(void) {
LinkedList *newnode = (LinkedList *) malloc(sizeof(LinkedList));
newnode->data = adddata();
newnode->next = NULL;
return newnode;
}
void destroylist(LinkedList *old) {
destroydata(old->data);
free(old);
return;
}
Data *adddata(void) {
Data *newdata = (Data *) malloc(sizeof(Data));
newdata->title = NULL;
return newdata;
}
void destroydata(Data *old) {
free(old->title);
free(old);
return;
}
我很困惑,因为它看起来似乎找到了这两个文件,但它的头有问题,即使它单独工作正常。
任何帮助都会很好。
谢谢错误消息很奇怪,但是
typedef struct LinkedList
{
LinkedList *next;
Data *data;
} LinkedList;
LinkedList
不是定义中的已知类型,只有在定义完成后才知道,它必须是
typedef struct LinkedList
{
struct LinkedList *next;
Data *data;
} LinkedList;
头文件不是自己编译的。它们的唯一用途是在其他地方包含 标题中的错误是此部分:
typedef struct LinkedList // <- defines the type 'struct LinkedList'
{
LinkedList *next; // <- attempts to use the type 'LinkedList', which isn't defined at this point
} LinkedList; // <- defines the type 'LinkedList', or it would if the previous code were correct
我最喜欢的是:
// establish alias first, then use it everywhere
typedef struct LinkedList LinkedList;
struct LinkedList {
LinkedList *next;
};
试试这个,它比其他建议更简洁(编辑:我看到melpomene在我之前提到过这个): 你会发现,当你移动到C++时,你可以移除TyPulf行。 如果有相互引用的结构,请将所有typedef上移到顶部,例如
typedef Type1 Type1;
typedef Type2 Type2;
struct Type1
{
Type2* link;
};
struct Type2
{
Type1* link;
};
除了<代码> Stutt > >代码> Link KEdList,您可能需要在VisualStudio./P>中明确地将“编译为”选项设置为C++。 我与这个C2016错误斗争了一段时间,最后通过设置选项将其修复
// use 'struct LinkedList' in its own definition but provide typedef to users
struct LinkedList {
struct LinkedList *next;
};
typedef struct LinkedList LinkedList;
// like the previous version, but combine struct + typedef
typedef struct LinkedList {
struct LinkedList *next;
} LinkedList;
// establish alias first, then use it everywhere
typedef struct LinkedList LinkedList;
struct LinkedList {
LinkedList *next;
};
typedef struct Data Data;
struct Data
{
char *title;
};
typedef struct LinkedList LinkedList;
struct LinkedList
{
LinkedList *next;
Data *data;
};
typedef Type1 Type1;
typedef Type2 Type2;
struct Type1
{
Type2* link;
};
struct Type2
{
Type1* link;
};