MFC下添加C语言的函数编译不过,急求大神

hnd201031000407 2012-04-07 11:42:24
我把C写的一个图书管理系统去掉main(),添加进MFC工程下,头文件里也声明了函数,但是我在其他函数里调用C语言的函数时老是说我没定义,编译C语言的函数也不能过,错误提示如下:
图书馆.cpp
D:\Program Files (x86)\Microsoft Visual Studio\MyProjects\工具\图书馆.cpp(214) : error C2601: 'BorrowBook' : local function definitions are illegal
D:\Program Files (x86)\Microsoft Visual Studio\MyProjects\工具\图书馆.cpp(261) : error C2601: 'pBrorrow' : local function definitions are illegal
D:\Program Files (x86)\Microsoft Visual Studio\MyProjects\工具\图书馆.cpp(277) : error C2601: 'ReturnBook' : local function definitions are illegal
D:\Program Files (x86)\Microsoft Visual Studio\MyProjects\工具\图书馆.cpp(309) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.

...全文
173 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnd201031000407 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

提示已经说的很清楚了,你传给strcpy的参数是整形,而它所期望的是字符串。
[/Quote]

。。。。大侠,我发现我再次错在一些无厘头的地方,我对头文件进行修改然后编译,头文件竟然还是原来的内容,我在外面打开一看才知道,改过来之后,问题都解决了。那我再请教你个问题吧。我建的工程是CView基类的,我想在客户区输出一些信息,比如我的图书管理系统,我要在客户区输出全部图书信息,要怎么做。
hnd201031000407 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

提示已经说的很清楚了,你传给strcpy的参数是整形,而它所期望的是字符串。
[/Quote]
可是问题是,我在头文件里定义的是char型的啊。比如说下面这里,
BO data2;
strcpy(data2.stunum,stunum);
我的BO在头文件里是这样定义的,
typedef struct node2
{
char booknum[20]; //书号
char stunum[20]; //学号
char stuname[20]; //学生名字
char time[20]; //归还时间
}BO;

stunum明明是char型啊,奇怪的是只是stunum和time这两个变量出错,好像是这两个变量我之前定义的就是int类型,可是后来运行发现int不够好,我就改成了char,不知道是不是这里有问题。
西山小月 2012-04-08
  • 打赏
  • 举报
回复
查查strcpy和strcat的用法
Jim_King_2000 2012-04-08
  • 打赏
  • 举报
回复
提示已经说的很清楚了,你传给strcpy的参数是整形,而它所期望的是字符串。
hnd201031000407 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

#include"stdafx.h"
永远让它成为第一行,否则编译会不过。这可以说是VC的一个小小的缺点吧。
[/Quote]
我发现上面提示的原因了,是我漏了个},可是又出现另一个错误,
D:\Program Files (x86)\Microsoft Visual Studio\MyProjects\工具\图书馆.cpp(236) : error C2664: 'strcpy' : cannot convert parameter 1 from 'int' to 'char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
所有调用strcpy和strcat的地方都有这个错误
Jim_King_2000 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 5 楼 的回复:

提示已经说的很清楚了,你传给strcpy的参数是整形,而它所期望的是字符串。


。。。。大侠,我发现我再次错在一些无厘头的地方,我对头文件进行修改然后编译,头文件竟然还是原来的内容,我在外面打开一看才知道,改过来之后,问题都解决了。那我再请教你个问题吧。我建的工程是CView基类的,我想在客户区输出一些信息,比如我的图书管理系统,我要在客户区输出全部图书信……
[/Quote]
你可以使用CTextView。
yh_no_code 2012-04-08
  • 打赏
  • 举报
回复
在OnDraw函数中,使用TextOut显示
Jim_King_2000 2012-04-07
  • 打赏
  • 举报
回复
#include"stdafx.h"
永远让它成为第一行,否则编译会不过。这可以说是VC的一个小小的缺点吧。
hnd201031000407 2012-04-07
  • 打赏
  • 举报
回复

#include<time.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include"stdafx.h"
#include "Book.h"

extern struct node *head;
extern struct node2 *head2;
extern struct node *index[10];

int larger(BK data1,BK data2) //通用的比较函数,通过condition的不同来进行不同的比较
{
if(strcmp(data1.No,data2.No)==1) //书号1>书号2
return 1;
else
return 0;
}
void InsertOrder(BK data)
{
struct node *p,*p1,*p2;
p2=head;
p=(struct node*)malloc(sizeof(struct node)); //利用指针P申请结点动态空间
p->data =data; //数据域赋值
p->next =NULL; //指针域直接赋值为空,以后根据插入位置在修改
if(head==NULL) //如果链表原来为空的插入
{
head=p; //新插入结点成为头结点
return ; //返回头指针
} //原链表不为空时的插入
while(p2)
{
if(strcmp(p2->data.No,p->data.No)==0)
{
p2->data.ku+=p->data.ku;
p2->data.xc+=p->data.ku;
break;
}
else if(strcmp(p2->data.No,p->data.No)==1)
{
if(head==p2)
head=p;
else
p1->next=p;
p->next=p2;
break;
}
else
{
p1=p2;
p2=p2->next;
}
}
if(!p2) {p1->next=p;p->next=p2;}
}


void printList(char *buff) //通过同pritfNode函数来打印链表信息
{
struct node *p;
char str[1000];
memset(str,0,sizeof(str));
if(head==NULL)
{
strcat(buff,"无记录\r\n");
return ;
}
wsprintf(buff,"书号\t书名\t作者\t库存\t现存\r\n");
for(p=head;p;p=p->next)
{
wsprintf(str,"%s\t%s\t%s\t%d\t%d\r\n",(p->data).No,p->data.Name,p->data.Author,p->data.ku,p->data.xc);
}
strcat(buff,str);

}


void readFile() //将文件中的内容读出置入单链表中
{
BK data;
FILE *fp;
head=NULL;
if((fp=fopen("book.dat","rb"))==NULL) //以读的方式打开指定文件
{
printf("\t\t\t#此次为首次运行,需要先创建新文件#\n");
return ;
}
fread(&data,sizeof(BK),1,fp); //读出第一条记录
while(!feof(fp)) //文件未结束时循环
{
InsertOrder(data); //从文件读出后按书号顺序插入链表
fread(&data,sizeof(BK),1,fp); //在读出下一条记录
}
fclose(fp); //关闭文件
}

void addborrow(BO data2)
{
struct node2 *p,*q;
p=(struct node2 *)malloc(sizeof(struct node2));
p->data2=data2;
q=head2;
head2=p;
p->next=q;
}

void readFile2()
{
BO data2;
FILE *fp;
head2=NULL;
if((fp=fopen("borrow.dat","rb"))==NULL) {fp=fopen("borrow.dat","wr"); return ;}
fread(&data2,sizeof(BO),1,fp);
while(!feof(fp))
{
addborrow(data2);
fread(&data2,sizeof(BO),1,fp);
}
fclose(fp);
}
void saveFile() //将链表中各结点的值一次写入文件
{
struct node *p=head;
FILE *fp;
if((fp=fopen("book.dat","wb"))==NULL)
{
printf("无法打开book.dat\n");
exit(0);
}
if(head==NULL)
{
printf("\n数据为空\n");
return ;
}
while(p)
{
fwrite(&p->data,sizeof(BK),1,fp);
p=p->next;
}
fclose(fp);
}
void saveFile2()
{
struct node2 *p=head2;
FILE *fp;
if((fp=fopen("borrow.dat","wb"))==NULL)
{
printf("无法打开borrow.dat\n");
exit(0);
}
if(head2==NULL)
{
return ;
}
while(p)
{
fwrite(&p->data2,sizeof(BO),1,fp);
p=p->next;
}
fclose(fp);
}

struct node *Index() //索引函数
{
struct node *p;
char sign,temp;
p=head;
index[p->data.No[0]-'0']=p;
sign=temp=p->data.No[0];
p=p->next;
while(p)
{
temp=p->data.No[0];
if(sign!=temp)
{
index[p->data.No[0]-'0']=p;
sign=temp;
p=p->next;
}
else p=p->next;
}
return head;
}

void SearchBook(CString name,char *buff)
{
int god=0;
struct node *p;
char str[1000];
memset(str,0,sizeof(str));
BK pdata;
strcpy(pdata.Name,name);
p=index[1]; //按索引搜索
while(p)
{
if(strstr((p->data).Name,pdata.Name))
{
wsprintf(str,"%s\t%s\t%s\t%d\t%d\r\n",(p->data).No,p->data.Name,p->data.Author,p->data.ku,p->data.xc);
god=1;
p=p->next;
}
else p=p->next;
}
if(god!=1) strcat(buff,"查找失败。");
else {
wsprintf(buff,"书号\t书名\t作者\t库存\t现存\r\n");
strcat(buff,str);
strcat(buff,"查找成功。");

}

void BorrowBook(CString no,CString stunum,CString stuname) //借书
{
char str[200];
memset(str,0,sizeof(str));
int have=0;
struct node *q;
BK data;
BO data2;
if(head==NULL) {MessageBox(NULL,"书库为空"," ",MB_OK);return ;}
strcpy(data.No,no);
q=head;
while(q)
{
if(strcmp(q->data.No,data.No)==0)
{
have=1;break;
}
else q=q->next;
}
if(have==0) {MessageBox(NULL,"没找到相应的图书"," ",MB_OK);return;}
else if(q->data.xc==0) {MessageBox(NULL,"图书现存量为零,请改天再借"," ",MB_OK);}
else
{
strcpy(data2.stunum,stunum);
strcpy(data2.stuname,stuname);
time_t ltime; //time
struct tm *today;
time(<ime);
ltime += 60 * 60 * 24 * 30;
today = localtime(<ime);
char ch[10];
char space[]="-";
itoa(today->tm_year+1900,ch,10);
strcpy(data2.time,ch);
strcat(data2.time,space);
itoa(today->tm_mon+1,ch,10);
strcat(data2.time,ch);
strcat(data2.time,space);
itoa(today->tm_mday,ch,10);
strcat(data2.time,ch);
strcpy(data2.booknum,data.No);
q->data.xc--;
addborrow(data2);
MessageBox(NULL,"借阅成功"," ",MB_OK);
}
}

void pBrorrow(char *buff)
{
struct node2 *p;
p=head2;
if(head2==NULL) {
strcat(buff,"记录为空\r\n");
return ;
}
strcat(buff,"书号\t借阅者\t学号\t归还时间\r\n")
while(p)
{
wsprintf(buff,"%s\t%s\t%s\t%s\r\n",p->data2.booknum,p->data2.stuname,p->data2.stunum,p->data2.time);
p=p->next;
}
}

void ReturnBook(CString stunum,CString booknum)
{
struct node *q;
struct node2 *p,*p2;
BO data2;
strcpy(data2.stunum,stunum);
strcpy(data2.booknum,booknum);
p2=p=head2;
q=head;
while(p)
{
if((strcmp(p->data2.stunum,data2.stunum)==0)&&(strcmp(p->data2.booknum,data2.booknum)==0)) break;
else
{
p2=p;
p=p->next;
}
}
if(p==NULL) {MessageBox(NULL,"无改借阅信息"," ",MB_OK);return ;}
while(q)
{
if(strcmp(q->data.No,data2.booknum)==0) break;
else q=q->next;
}
if(head2=p) head2=NULL;
else
{
p2->next=p->next;
p->next=NULL;
}
q->data.xc++;
MessageBox("还书成功\n");
}

[Quote=引用 1 楼 的回复:]

把代码贴上来看看吧。
[/Quote]
Jim_King_2000 2012-04-07
  • 打赏
  • 举报
回复
把代码贴上来看看吧。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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