多文件编程中,函数调用其它函数是出现的问题出现"未定义的错误"

DEREK_D 2016-06-05 02:40:16
#include <stdio.h>
#include <stdlib.h>
//#include <direct.h>
#include<string.h>
#include"people.h"//头文件名称

.....
printf("需要进行排序?\n");
gets(opti);
if(strcmp("yes",opti)==0)
head=InsertSort(pointer);
调用部分


头文件
#ifndef PEOPLE_H_INCLUDED
#define PEOPLE_H_INCLUDED

typedef struct cases
{char time[20];
int realtime;
char local[64];
char invonum[12];
char caseditai[64];
int realinvonum;
int id;//结构体中的int类型都仅在程序过程中改变,初始化
int state;//0:未被接受 1:正在处理 2:已完成 3:已拒绝
char BAT[12];
struct cases *next;
}cases,*Prt_cases;
void signin();//创建账号
void chgpassw(char* tel);//改密码
void showlist();/////!!!!!!!!!!这里!!!!!

int sendpolic(Prt_cases head);
void visit(char* targ);//获取当前绝对路径的字符串,路径读到final文件夹,targ含有finpeople或finpolice或其内的txt文件名
void getlist(Prt_cases* pointer,char* targ);
Prt_cases InsertSort(Prt_cases* pointer);/////!!!!!!!!!!这里!!!!!

#endif // PEOPLE_H_INCLUDED





错误: undefined reference to `InsertSort'|
||error: ld returned 1 exit status|



望多多指教
...全文
645 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
DEREK_D 2016-06-05
  • 打赏
  • 举报
回复
谢谢各位的回答
paschen 2016-06-05
  • 打赏
  • 举报
回复
引用 6 楼 DEREK_D 的回复:
不好意思,改了函数名 ....现在是sortt insort 那个在问之前发现有错,换成了sortt,这个应该和我们讨论的错误没关系 改正InsertSort 的错误后我看obj文件夹里有InsertSort 的.o文件 再替换回InsertSort居然不报错了!!!! 问题是两个函数都是几乎语言的声明,定义,链接,头文件中与showlist的相对声明顺序也是一样,怎么sortt不行,InsertSort就行呢??? 是因为.o文件吗??? 大师们....有类似的经历吗....
不会可能这个函数名可以那个不行,你检查好有没有全部改成统一的了,不要有的地方改了,有的地方没改
DEREK_D 2016-06-05
  • 打赏
  • 举报
回复
不好意思,改了函数名 ....现在是sortt insort 那个在问之前发现有错,换成了sortt,这个应该和我们讨论的错误没关系 改正InsertSort 的错误后我看obj文件夹里有InsertSort 的.o文件 再替换回InsertSort居然不报错了!!!! 问题是两个函数都是几乎语言的声明,定义,链接,头文件中与showlist的相对声明顺序也是一样,怎么sortt不行,InsertSort就行呢??? 是因为.o文件吗??? 大师们....有类似的经历吗....
paschen 2016-06-05
  • 打赏
  • 举报
回复
引用 4 楼 DEREK_D 的回复:
[quote=引用 1 楼 paschen 的回复:] Prt_cases InsertSort(Prt_cases* pointer); 难道应该是: Prt_cases* InsertSort(Prt_cases* pointer);
结构体的指针是Prt_cases,加*就是二级指针了,我想返回一级指针. Prt_cases sortt(Prt_cases* head) {int i=0;// ///*保存名次*/ Prt_cases *p1,*p2,*t,*temp; ///*定义临时指针*/ temp=head->next; ///*将原表的头指针所指的下一个结点作头指针*/ head->next=NULL; ///*第一个结点为新表的头结点*/ printf("对什么元素进行排序?\n"); gets(targ); if(strcmp(targ,"state")==0)/////////////////////////////省略其他两种情况,大致一样 { while(temp!=NULL) ///*当原表不为空时,进行排序*/ { t=temp; ///*取原表的头结点*/ temp=temp->next; ///*原表头结点指针后移*/ p1=head; ///*设定移动指针p1,从头指针开始*/ p2=head; ///*设定移动指针p2做为p1的前驱,初值为头指针*/ while(t->state<=p1->state&&p1!=NULL) ///*作成绩平均分比较*/ {p2=p1; ///*待排序点值小,则新表指针后移*/ p1=p1->next; } if(p1==p2) ///*p1==p2,说明待排序点值大,应排在首位*/ {t->next=p1; ///*待排序点的后继为p*/ head=t; ///*新头结点为待排序点*/ } else ///*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/ {t->next=p1; ///*t的后继是p1*/ p2->next=t; ///*p2的后继是t*/ } } p1=head; ///*已排好序的头指针赋给p1,准备填写名次*/ while(p1!=NULL) ///*当p1不为空时,进行下列操作*/ {i++; ///*结点序号*/ p1->order=i; ///*将结点序号赋值给名次*/ p1=p1->next; ///*指针后移*/ } } printf("排序成功 Sorting is sucessful.\n"); ///*排序成功*/ Prt_cases ans=*head; return ans; }[/quote] 不知道,自己检查参数类型等对不对 @qq423399099 没有实现的话是链接错误,不是编译错误
DEREK_D 2016-06-05
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
Prt_cases InsertSort(Prt_cases* pointer); 难道应该是: Prt_cases* InsertSort(Prt_cases* pointer);
结构体的指针是Prt_cases,加*就是二级指针了,我想返回一级指针. Prt_cases sortt(Prt_cases* head) {int i=0;// ///*保存名次*/ Prt_cases *p1,*p2,*t,*temp; ///*定义临时指针*/ temp=head->next; ///*将原表的头指针所指的下一个结点作头指针*/ head->next=NULL; ///*第一个结点为新表的头结点*/ printf("对什么元素进行排序?\n"); gets(targ); if(strcmp(targ,"state")==0)/////////////////////////////省略其他两种情况,大致一样 { while(temp!=NULL) ///*当原表不为空时,进行排序*/ { t=temp; ///*取原表的头结点*/ temp=temp->next; ///*原表头结点指针后移*/ p1=head; ///*设定移动指针p1,从头指针开始*/ p2=head; ///*设定移动指针p2做为p1的前驱,初值为头指针*/ while(t->state<=p1->state&&p1!=NULL) ///*作成绩平均分比较*/ {p2=p1; ///*待排序点值小,则新表指针后移*/ p1=p1->next; } if(p1==p2) ///*p1==p2,说明待排序点值大,应排在首位*/ {t->next=p1; ///*待排序点的后继为p*/ head=t; ///*新头结点为待排序点*/ } else ///*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/ {t->next=p1; ///*t的后继是p1*/ p2->next=t; ///*p2的后继是t*/ } } p1=head; ///*已排好序的头指针赋给p1,准备填写名次*/ while(p1!=NULL) ///*当p1不为空时,进行下列操作*/ {i++; ///*结点序号*/ p1->order=i; ///*将结点序号赋值给名次*/ p1=p1->next; ///*指针后移*/ } } printf("排序成功 Sorting is sucessful.\n"); ///*排序成功*/ Prt_cases ans=*head; return ans; }
小灸舞 2016-06-05
  • 打赏
  • 举报
回复
你这个应该是没有把函数InsertSort实现吧?
手动编译链接的话检查:是否把InsertSort所在的源文件链接进来了
IDE的话,检查对应CPP文件是否被添加到工程里了
apple_v1 2016-06-05
  • 打赏
  • 举报
回复
只有声明没看到定义?
paschen 2016-06-05
  • 打赏
  • 举报
回复
Prt_cases InsertSort(Prt_cases* pointer); 难道应该是: Prt_cases* InsertSort(Prt_cases* pointer);

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧