Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用函数C++;_C++_Pointers - Fatal编程技术网

C++ 调用函数C++;

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

在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 <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
类型也制作成模板,这样它就不仅可以使用函数指针。