初学者---文件包含可以完全运行,工程文件只可以编译,却链接出错,怎么回事?完全莫不清楚状况。
程序代码:
编程实现功能:求2个数的最大公约数和最小公倍数。要求用函数实现,并且将主函数和这两个函数分别存入3个文件a.cpp,b.cpp,c.cpp中,并且将b.cpp和c.cpp两个文件中函数的声明编写一个名为bc.h的头文件,在主函数中将bc.h包含进来,然后分别用文件包含和工程文件两种方法实现多文件的编译链接。 我第一种方法(文件包含)可以运行出来,可是第二种方法(工程文件)可以编译,不可以连接是怎么回事? 总显示这个: Linking... b.obj : error LNK2005: "long __cdecl b(long,long)" (?b@@YAJJJ@Z) already defined in a.obj c.obj : error LNK2005: "long __cdecl b(long,long)" (?b@@YAJJJ@Z) already defined in a.obj c.obj : error LNK2005: "long __cdecl c(long,long)" (?c@@YAJJJ@Z) already defined in a.obj abjhhh.exe : fatal error LNK1169: one or more multiply defined symbols found 【a.cpp】 #include <stdio.h> #include "b.cpp" #include "c.cpp" #include "bc.h" void main() { long a,h,m; printf("please input a,h: "); scanf("%d,%d",&a,&h); if(a<h) { m=a;a=h;h=m; //a是较大值,h是较小值 } printf("\n***********************************\n"); printf("\n%d和%d的最大公约数是%d\n",a,h,b(a,h)); printf("%d和%d的最小公倍数是%d\n",a,h,c(a,h)); } 【b.cpp】 long b(long x,long y) { long k,n,r; k=x; n=y; //k是较大值,n是较小值 while(n!=0) { r=k%n; k=n; n=r; } return k; } 【c.cpp】 long c(long x,long y) { long k,n,l; k=x; n=y; l=k*n/b(k,n); return l; } 【bc.h】 long b(long x,long y); long c(long x,long y);