C++ 调用函数C++;
在main函数中,我调用Choice函数。目标是选择具有递增或递减顺序的排序类型。 我调用Choice来接收两个isbiger和Interchange函数的地址。 这是密码C++ 调用函数C++;,c++,pointers,C++,Pointers,在main函数中,我调用Choice函数。目标是选择具有递增或递减顺序的排序类型。 我调用Choice来接收两个isbiger和Interchange函数的地址。 这是密码 #include <iostream> using namespace std; template <class T> void Swap(T *a, T *b) { T temp = *a; *a = *b; *b = temp; } template <clas
#include <iostream>
using namespace std;
template <class T>
void Swap(T *a, T *b)
{
T temp = *a;
*a = *b;
*b = temp;
}
template <class T>
void Interchange(T a[], int n, bool(*Cmp)(T, T))
{
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (Cmp(a[i], a[j]))
Swap(&a[i], &a[j]);
}
template <class T>
void Insertion(T a[], int n, bool(*Cmp)(T, T))
{
int x, j;
for (int i = 0; i < n; i++)
{
x = a[i]; j = i - 1;
while (j >= 0 && !Cmp(a[j],x))
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = x;
}
}
template <class T>
bool IsBigger(T a, T b)
{
return a > b;
}
template <class T>
void Choice(T a[], int n, bool(*Cmp)(T, T), void(*Sort)(T*, int, bool*))
{
Sort(a, n, Cmp);
}
int main()
{
int a[] = { 3,4,1,5 };
Choice<int>(a, 4, &IsBigger, &Interchange);
return 0;
}
#包括
使用名称空间std;
模板
无效掉期(T*a、T*b)
{
温度=*a;
*a=*b;
*b=温度;
}
模板
无效交换(T a[],整数n,布尔(*Cmp)(T,T))
{
对于(int i=0;i=0&&!Cmp(a[j],x))
{
a[j+1]=a[j];
j--;
}
a[j+1]=x;
}
}
模板
布尔更大(T a,T b)
{
返回a>b;
}
模板
void选项(ta[],int n,bool(*Cmp)(T,T),void(*Sort)(T*,int,bool*))
{
排序(a,n,Cmp);
}
int main()
{
int a[]={3,4,1,5};
选择(a,4,&IsBiger,&Interchange);
返回0;
}
在主函数中,函数选择在调用较大和交换时出错。错误为“没有函数模板实例”选项“与参数列表匹配”
我不知道我错了什么。请帮帮我。非常感谢您的选择(a、4、更大、交换)代码>实际上,
选项
有错误的签名。它说,Sort
应该是一个以bool*
为第三个参数的函数,但调用它传递的不是bool*
的内容,而是Choice
中的Sort
签名错误:void(*Sort)(T*,int,bool*)
(检查第三个参数)。如果您修复了它,它就会编译。您最好将Cmp
类型也制作成模板,这样它就不仅可以使用函数指针。