注册 登录
编程论坛 C++教室

下面程序有错误提示.原因是什么呢

舞动 发布于 2007-07-27 19:18, 515 次点击

#include<iostream.h>
#define MAX 100
typedef struct
{
int data[MAX];
int length;
}sqlist;
sqlist LA,LB,LC;
sqlist A,B;
int Merge( A,B)
{
int i=0;j=0;k=0;
LC.length=LA.length+LB.length;
while((i<A.length)&&(j<B.length))
{
if(A.data[i]<=B.data[j])
{
LC.data[k]=A.data[i];
cout<<LC.data[k]<<endl;
i++;
k++
}
else
{
LC.data[k]=B.data[j];
cout<<LC.data[k]<<endl;
j++;
k++;
}
}
while(i<A.length)
{
LC.data[k]=A.data[i];
i++;
k++;
}
while(j<B.length)
{
LC.data[k]=B.data[j];
j++;
K++;

}
return(1);

}
void main()
{
sqlist LA,LB,LC;
int i,j,k;
cout<<"请输入线形表A";
cout<<endl;
for(i=0;i<LA.length;i++)
cin>>LA.data[i];
cout<<"请输入线形表B";
cout<<endl;
for(j=0;j<LB.length;j++)
cin>>LB.length;
Merge(LA,LB);
cout<<"请输入合并后的表";
cout<<endl;
for(k=0;k<LC.length;k++)
cout<<LC.data[k];
}

E:\课程全部\C++\Cpp2.cpp(59) : error C2065: 'Merge' : undeclared identifier
error C2065: 'Merge' : undeclared identifier

6 回复
#2
wtyj1122007-07-27 19:48
#include<iostream.h>
#define MAX 100
typedef struct
{
int data[MAX];
int length;
}sqlist;
sqlist LA,LB,LC;
sqlist A,B;
int Merge( sqlist A, sqlist B ) // must to show what's the type of parameter to the compiler
{
int i=0,j=0,k=0; // use ';' to replace ','
LC.length=LA.length+LB.length;
while((i<A.length)&&(j<B.length))
{
if(A.data[i]<=B.data[j])
{
LC.data[k]=A.data[i];
cout<<LC.data[k]<<endl;
i++;
k++;
}
else
{
LC.data[k]=B.data[j];
cout<<LC.data[k]<<endl;
j++;
k++; // miss ;
}
}
while(i<A.length)
{
LC.data[k]=A.data[i];
i++;
k++;
}
while(j<B.length)
{
LC.data[k]=B.data[j];
j++;
k++;

}
return(1);

}
void main()
{
sqlist LA,LB,LC;
int i,j,k;
cout<<"请输入线形表A";
cout<<endl;
for(i=0;i<LA.length;i++)
cin>>LA.data[i];
cout<<"请输入线形表B";
cout<<endl;
for(j=0;j<LB.length;j++)
cin>>LB.length;
Merge(LA,LB);
cout<<"请输入合并后的表";
cout<<endl;
for(k=0;k<LC.length;k++)
cout<<LC.data[k];
}
#3
wtyj1122007-07-27 19:52

出错原因 在写函数merge的时候 参数类型没有说明,编译器在运行的时候认为你在main的中的
merge与你说写的是两个函数应为c++支持重载,所以他认为你在main中的merge没有定义。
将int Merge( A, B )修改成int Merge( sqlist A, sqlist B )后问题解决。

#4
舞动2007-07-27 21:18
现在的确编译没有问题了
可是却不能输入值
这需要怎么改呢
#5
wtyj1122007-07-28 01:06
#include<iostream.h>
#define MAX 100
typedef struct
{
int data[MAX];
int length;
}sqlist;
sqlist LA,LB,LC;
//sqlist A,B;
int Merge( sqlist A, sqlist B ) // must to show what's the type of parameter to the compiler
{
int i=0,j=0,k=0; // use ';' to replace ','
LC.length=LA.length+LB.length;
while((i<A.length)&&(j<B.length))
{
if(A.data[i]<=B.data[j])
{
LC.data[k]=A.data[i];
cout<<LC.data[k]<<endl;
i++;
k++;
}
else
{
LC.data[k]=B.data[j];
cout<<LC.data[k]<<endl;
j++;
k++; // miss ;
}
}
while(i<A.length)
{
LC.data[k]=A.data[i];
i++;
k++;
}
while(j<B.length)
{
LC.data[k]=B.data[j];
j++;
k++;

}
return(1);

}
void main()
{
// sqlist LA,LB,LC;
cin>>LA.length;
cin>>LB.length;
int i,j,k;
cout<<"请输入线形表A";
cout<<endl;
for(i=0;i<LA.length;i++)
cin>>LA.data[i];
cout<<"请输入线形表B";
cout<<endl;
for(j=0;j<LB.length;j++)
cin>>LB.data[j];
Merge(LA,LB);
cout<<"请输入合并后的表";
cout<<endl;
for(k=0;k<LC.length;k++)
cout<<" "<<LC.data[k];
}

不能输入是因为你为给表的长度赋值啊!!给你改了下。你写的合并函数你的本意是要怎样来合并啊?我不知道 如果是要合并成从小到大的表的话,你应该在合并前将a,b表排序 。
#6
yushui2007-07-28 08:35

楼主的lengh不知道长度 开始

#7
aipb20072007-07-28 10:32
merge函数原型,参数类型错误。
length的值从头到尾未知。
1