2013-03-22 43 views
1

首先,我是C新手,对我很裸露。如何在我的.C文件中声明结构?

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

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


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

现在我怎么做这些可用在我的.C文件?我已经#include头文件,但是当我尝试调用,例如,myList.head,我不断收到错误,指出我正在尝试对不是结构或联合的东西执行操作,那么如何解决这个问题?

+1

一个侧面说明,据我所知,.C是C++文件的常规扩展而不是C文件,至少在使用gcc时 – Fingolfin 2013-03-22 02:00:12

+1

头文件应该被称为myList.h而不是'.head '。有关进一步的问题,请始终包含编译器的实际错误消息。释义太多的信息会被解释掉。 – kay 2013-03-22 02:01:07

+0

@Kay“头文件应该叫myList.h,不是.head” - 呃,应该很明显,'myList'是'list *',不是文件名,'head'是' list',而不是文件扩展名,并且OP需要'myList-> head'。 “myList-> head”会是一个有问题的文件名。 – 2013-03-22 07:07:34

回答

3

您需要在第一个struct后面加分号。 或者摆脱你的typedef,或者给它一个名字。

+1

typedef的名称也丢失了。 – kay 2013-03-22 02:00:02

+0

哦对,哎呀:)修正。 – alf 2013-03-22 02:01:03

+0

在实际的代码中遗漏了分号,在我在这里输入代码时这是一个错误 – user1795374 2013-03-22 13:07:44

3

您的typedef是错误的。语法是:

typedef [some_type_definition] [type_name]; 

类型定义是这样的:

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

所以你需要typedef前缀它与node后缀它(分号之前)。这将允许您使用nodestruct node来引用结构。

对于你的清单,你没有命名结构,但你做了typedef它。这意味着您不能将其称为struct list - 您只能使用list。如果需要,您可以命名该结构。

+0

但是我的问题是,如果所有这些都在我的头文件中,我该如何在我的实际c文件中准确地使用该结构? – user1795374 2013-03-22 13:02:47

+0

在我的C文件中,我有方法在列表和节点中传递,但是当我尝试访问列表内容(例如传入的列表头)时,我被告知结构不是结构。 ..它是 – user1795374 2013-03-22 13:04:11

+0

你只是包括头。如果你正确地声明了你的类型,那么当你定义这个类型的变量或指针时,一切都会好的。如果你有'list myList',那么你可以访问'myList.head'。如果你有'list * myList',你可以作为'myList-> head'访问。 – paddy 2013-03-22 14:28:59