0
回答
用vs2010出现的 error LNK2005。如果 把程序合在一起写 是正确的,分开就错了
【腾讯云】学生服务器套餐10元/月 >>>   

分了三个文件   头文件一个,两个CPP文件  

1.h
#include<stdlib.h>
#include<iostream>

#define OK 1
#define FALSE 0

typedef int elemtype;
typedef int status;
typedef elemtype *Triplet;

t.cpp


#include"1.h"

status InitTriplet(Triplet &t,elemtype e1,elemtype e2,elemtype e3)
{
 t=(elemtype *)malloc(3*(sizeof(elemtype)));
 if(!t)   exit(-1);
 t[0]=e1; t[1]=e2; t[2]=e3;
 return OK;
}//将三元组初始化

status DestroyTriplet(Triplet &t)
{
 free(t);
 t=NULL;
 return OK;
}//销毁原本存在的三元组

status Get(Triplet T,int i,elemtype &e)
{  
 if(i<0||i>3)   return FALSE;
 e=T[i-1];      return OK;
}//得到三元组中第i个数

status Put(Triplet &T,int i,elemtype e)
{
 if(i<0||i>3)  return FALSE;
 T[i-1]=e;     return OK;
}//将一个数放入第i个元素

status IsAscending(Triplet T)
{
 if((T[0]<=T[1])&&(T[1]<=T[2]))  return OK;
 else    return FALSE;
}//看三元组是否按升序排列

status  IsDescending(Triplet T)
{
 if((T[0]>=T[1])&&(T[1]>=T[2]))   return OK;
 else    return FALSE;
}//看三元组是否按降序排列

status Max(Triplet T,elemtype &e)
{
 //e=((T[0]>T[1])?T[0]:T[1])<T[2]?T[2]:((T[0]>T[1])?T[0]:T[1])
 //这样写运算效率较低,可以改写成:
 e=((T[1]<=T[2])?((T[0]<=T[2])?T[2]:T[0]):((T[1]<=T[0])?T[0]:T[1]));
 return OK;
}//得到三元组中的最大值

status Min(Triplet T,elemtype &e)
{
 e=(T[1]>=T[2])?((T[0]>=T[2])?T[2]:T[0]):((T[1]>=T[0])?T[0]:T[1]);
 return OK;
}//得到三元组中的最小值

2.cpp


#include"t.cpp"

using namespace  std;
void main()
{
 Triplet T;
 status i;
 elemtype m;
 i=InitTriplet(T,5,7,9);
 printf("调用初始化函数后:i=%d(1:成功)  T的三个值为",i);
 cout<<T[0]<<' '<<T[1]<<' '<<T[2]<<endl;
 i=Get(T,2,m);
 if(i==OK) cout<<"T的第2个值为"<<m<<endl;
   i=Put(T,2,5);
 if(i==OK)    cout<<"将T的第二个值改为5后,T的三个值为"<<T[0]<<" "<<T[1]<<" "<<T[2]<<endl;
 i=IsAscending(T); 
 cout<<"调用测试升序的函数后,i="<<i<<"(0:否;1:是)"<<endl;
 i=IsDescending(T);
 cout<<"调用测试降序的函数后,i="<<i<<"(0:否;1:是)"<<endl;
 i=Max(T,m);
 if(i=1)  cout<<"T中的最大值为"<<m<<endl;
 i=Min(T,m);
 if(i=1)  cout<<"T中的最小值为"<<m<<endl;
 DestroyTriplet(T);
 cout<<"销毁T后,T="<<T<<endl;
 
}

输出

1>t.obj : error LNK2005: "int __cdecl InitTriplet(int * &,int,int,int)" (?InitTriplet@@YAHAAPAHHHH@Z) 已经在 2.obj 中定义
1>t.obj : error LNK2005: "int __cdecl DestroyTriplet(int * &)" (?DestroyTriplet@@YAHAAPAH@Z) 已经在 2.obj 中定义
1>t.obj : error LNK2005: "int __cdecl Get(int *,int,int &)" (?Get@@YAHPAHHAAH@Z) 已经在 2.obj 中定义
1>t.obj : error LNK2005: "int __cdecl Put(int * &,int,int)" (?Put@@YAHAAPAHHH@Z) 已经在 2.obj 中定义
1>t.obj : error LNK2005: "int __cdecl IsAscending(int *)" (?IsAscending@@YAHPAH@Z) 已经在 2.obj 中定义
1>t.obj : error LNK2005: "int __cdecl IsDescending(int *)" (?IsDescending@@YAHPAH@Z) 已经在 2.obj 中定义
1>t.obj : error LNK2005: "int __cdecl Max(int *,int &)" (?Max@@YAHPAHAAH@Z) 已经在 2.obj 中定义
1>t.obj : error LNK2005: "int __cdecl Min(int *,int &)" (?Min@@YAHPAHAAH@Z) 已经在 2.obj 中定义
1>E:\MyProjects\DataStructures\Experiment\1\Debug\1.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

三段代码合在一起写,是对的。

举报
MollyWendy
发帖于7年前 0回/2K+阅
顶部