急!!!连接不上头文件函数!
main.c文件程序代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "list.h" #define MAX 50 void showmovies(Item item); int main(void) { List movies; Item temp; InitializeList(&movies); if(ListIsFull(movies)) { fprintf(stderr,"没有内存可用!\n"); exit(1); } puts("输入第一个电影名称:"); while(gets(temp.title)!=NULL && temp.title[0]!='\0') { puts("输入电影的等级<0-10>"); scanf("%d",&temp.rating); while(getchar()!='\n') continue; if(AddItem(temp,&movies)==false) { fprintf(stderr,"分配内存问题\n"); break; } if(ListIsFull(movies)) { puts("这个列表已满"); break; } puts("输入第一个电影名称:"); } if(ListIsEmpty(movies)) printf("没有数据输入."); else { printf("这是电影名单:\n"); Traverse(movies,showmovies); } printf("你输入 %d 级的电影.\n",ListItemCount(movies)); EmptyTheList(&movies); printf("退出程序!\n"); return 0; } void showmovies(Item item) { printf("电影:%s 等级:%d\n",item.title,item.rating); }
list.c文件
程序代码:
#include <stdio.h> #include <stdlib.h> #include "list.h" static void CopyToNode(Item item,Node * pnode); /*接口函数*/ /*把列表设置为空列表*/ void InitializeList(List * plist) { * plist = NULL; } bool ListIsEmpty(const List * plist) { if(*plist == NULL) return true; else return false; } bool ListIsFull(const List * plist) { Node * pt; bool full; pt = (Node *)malloc(sizeof(Node)); if(pt == NULL) full=true; else full=false; free(pt); return full; } /*返回节点数*/ unsigned int ListItemCount(const List * plist) { unsigned int count = 0; Node * pnode = *plist; while(pnode != NULL) { ++count; pnode = pnode->next; } return count; } bool AddItem(Item item,List * plist) { Node * pnew; Node * scan = * plist; pnew = (Node *)malloc(sizeof(Node)); if(pnew==NULL) return false; CopyToNode(item,pnew); pnew->next = NULL; if(scan == NULL) * plist = pnew; else { while(scan->next != NULL) scan = scan->next; scan->next = pnew; } return true; } void Traverse (const List * plist,void (* pfun)(Item item)) { Node * pnode = *plist; while(pnode!=NULL) { (*pfun)(pnode->item); pnode=pnode->next; } } void EmptyTheList(List * plist) { Node * psave; while(*plist != NULL) { psave = (*plist)->next; free(*plist); *plist=psave; } } static void CopyToNode(Item item,Node * pnode) { pnode->item=item; }
list.h文件
程序代码:
#ifndef LIST_H_ #define LIST_H_ #include <stdbool.h> #define TSIZE 45 struct film { char title[TSIZE]; int rating; }; typedef struct film Item; typedef struct { Item item; struct node * next; } Node; typedef Node * List; /*函数原型*/ /*操作:初始化一个列表*/ /*操作前:plist指向一个列表*/ /*操作后:该列表被初始化为空列表*/ void InitializeList(List * plist); /*操作:确定列表是否为空列表*/ /*操作前:plist指向一个已初始化的列表*/ /*操作后:如果该列表为空则返回true;否则返回false*/ bool ListIsEmpty(const List * plist); /*操作:确定列表是否已满*/ /*操作前:plist指向一个已初始化的列表*/ /*操作后:如果该列表已满返回true;否则返回false*/ bool ListIsFull(const List * plist); /*操作:确定列表中项目的个数*/ /*操作前:plist指向一个已初始化的列表*/ /*操作后:返回该列表中项目的个数*/ unsigned int ListItemCount(const List * plist); /*操作:确定列表中项目的个数*/ /*操作前:item是要被增加到列表的项目 plist是指向一个初始化的列表*/ /*操作后:如果可能的话,在列表尾部增加一个新项目 函数返回true;否则返回false*/ bool AddItem(Item item,List * plist); /*操作:把一个函数作用于列表中的每个项目*/ /*操作前:plist指向一个已初始化的列表 pfun指向一个函数,该函数接受一个Item参数并且无返回值*/ /*操作后:pfun指向的函数被作用到,列表中的每个项目一次*/ void Traverse (const List * plist,void (*pfun)(Item item)); /*操作:释放已分配的内存(如果有)*/ /*操作前:plist 指向一个已初始化的列表*/ /*操作后:为该列表分配的内存已被释放,并且该列表被置为空列表*/ void EmptyTheList(List * plist); #endif
obj\Debug\main.o||In function `main':|
\Structure\main.c|14|undefined reference to `InitializeList'|
\Structure\main.c|15|undefined reference to `ListIsFull'|
\Structure\main.c|27|undefined reference to `AddItem'|
\Structure\main.c|32|undefined reference to `ListIsFull'|
\Structure\main.c|40|undefined reference to `ListIsEmpty'|
\Structure\main.c|45|undefined reference to `Traverse'|
\Structure\main.c|47|undefined reference to `ListItemCount'|
\Structure\main.c|48|undefined reference to `EmptyTheList'|
||=== 已完成构建: 8 个错误, 0 个警告 ===|
[ 本帖最后由 逆丶 于 2012-3-10 23:40 编辑 ]