在另一个错误中调用一个函数:"no matching function for call to `merge(int*&, int&, int&, int&)"
Calling one function inside of another error: "no matching function for call to `merge(int*&, int&, int&, int&)"
使用了两个函数merge()和mergesort()。mergessort()正在尝试调用merge,但显示"no matching function"错误。
使用类编写以下代码时不会遇到相同的错误
#include<iostream>
using namespace std;
//MERGE SORT
void mergesort(int arr[],int l,int h)
{
int m=(l+h)/2;
if(l<h)
{
mergesort(arr,l,m-1);
mergesort(arr,m,h);
merge(arr,l,h,m);
}
}
//CALLING THIS FUNCTION IN mergesort() IS GIVING AN ERROR
void merge(int arr[],int l,int h,int m)
{
int a1[m-l];
int a2[h-m+1];
int i=l,j=m,ptr=0;
while(i<m&&j<h+1)
{
if(a1[i]<a2[j])
{
arr[ptr++]=a1[i++];
}
else
{
arr[ptr++]=a2[j++];
}
}
if(i<m)
{
for(int k=i;k<m;k++)
{
arr[ptr++]=a1[k];
}
}
else
{
for(int k=j;k<h+1;k++)
{
arr[ptr++]=a2[k];
}
}
}
void printarray(int arr[], int n)
{
for(int i=0;i<n;i++)
cout<<arr[i];
}
int main()
{
int arr[]={12, 11, 13, 5, 6, 7};
mergesort(arr,0,5);
printarray(arr,6);
return(0);
}
你需要先声明合并函数,因为编译器不知道应该接受多少个参数,每个参数是什么类型
#include<iostream>
using namespace std;
void merge (int [], int, int, int);
//MERGE SORT
void mergesort(int arr[],int l,int h)
{
int m=(l+h)/2;
if(l<h)
{
mergesort(arr,l,m-1);
mergesort(arr,m,h);
merge(arr,l,h,m);
}
}
//CALLING THIS FUNCTION IN mergesort() IS GIVING AN ERROR
void merge(int arr[],int l,int h,int m)
{
int a1[m-l];
int a2[h-m+1];
int i=l,j=m,ptr=0;
while(i<m&&j<h+1)
{
if(a1[i]<a2[j])
{
arr[ptr++]=a1[i++];
}
else
{
arr[ptr++]=a2[j++];
}
}
if(i<m)
{
for(int k=i;k<m;k++)
{
arr[ptr++]=a1[k];
}
}
else
{
for(int k=j;k<h+1;k++)
{
arr[ptr++]=a2[k];
}
}
}
void printarray(int arr[], int n)
{
for(int i=0;i<n;i++)
cout<<arr[i];
}
int main()
{
int arr[]={12, 11, 13, 5, 6, 7};
mergesort(arr,0,5);
printarray(arr,6);
return(0);
}
您必须将这一行放在mergesort
函数声明之前:
void merge(int arr[],int l,int h,int m);
或者,您可以交换函数merge
和mergesort
,以便后者在前者之前声明。
一般来说,不能引用没有在任何地方声明的函数。上面的代码行介绍了merge
函数,即使该定义在mergesort
on之后被搁置。这样,该函数的原型是已知的,并且可以在另一个函数中使用它。
相关文章:
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- static_cast int to reference to int?
- 访问基类型数组成员(Int-to-type习惯用法)
- Int to Base 2 & 8 优化
- ASCII to int to ASCII (ATMEGA 2560)
- 简单的 int 到字符串转换..int to const char* 无效
- visual Int to char c++
- 隐式转换更改符号性 'int " to 'unsigned int"
- 如何修复此错误错误"error C2440: '=' : cannot convert from 'int (*)[]' to 'int *' "?
- int to char C++ help me
- Int to PCSTR for Winsock DEFAULT_PORT
- 将 double 分配给 const int&vs int to const int&
- "cannot Convert vector<int>* to int"是什么意思?
- 如何解决此棉绒警告"Implicit binary conversion from int to unsigned int"
- c++ int to char
- 为什么我会收到"cannot convert from Dequeu<int> to int"错误?
- "error: invalid conversion from 'int*' to 'int' function"
- "Truncation from int to char"不产生任何结果
- Cast int to void* and void* to int for TMemoryStream->WriteBuffer (C++Builder XE7)
- C++ Int to Array without Libs