急!!!连接不上头文件函数!
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 编辑 ]








