不能将函数 模板“void selectionSort(T [],int)”用作函数参数
来源:2-2 使用模板(泛型)编写算法
keyboard2steper
2017-01-17
分别定义如下: template<typename T> void SortTime( string sortName,void(*sort)(T[],int), T arr[],int n) { clock_t startTime = clock(); sort(arr ,n); clock_t endTime = clock(); assert( isSorted(arr , n)); cout<<sortName << " :" <<double(endTime-startTime) /CLOCKS_PER_SEC <<" s" <<endl; return; } ----------------------------------------------------------------------------------------------------- template<typename T> void selectionSort(T arr[], int n){ for(int i = 0 ; i < n ; i ++){ int minIndex = i; for( int j = i + 1 ; j < n ; j ++ ) if( arr[j] < arr[minIndex] ) minIndex = j; swap( arr[i] , arr[minIndex] ); } } 调用如下: SortHelper::SortTime("Selection Sort", selectionSort,arr,n);
报错:
1>c:\algorithm\selectionsort\selectionsort\main.cpp(28): error C2896: “void SortHelper::SortTime(std::string,void (__cdecl *)(T [],int),T [],int)”: 不能将函数 模板“void selectionSort(T [],int)”用作函数参数
1> c:\algorithm\selectionsort\selectionsort\main.cpp(8) : 参见“selectionSort”的声明
1>c:\algorithm\selectionsort\selectionsort\main.cpp(28): error C2784: “void SortHelper::SortTime(std::string,void (__cdecl *)(T [],int),T [],int)”: 未能从“重载函数类型”为“重载函数类型”推导 模板 参数
请问这个该如何解决 多谢 !
写回答
3回答
-
这里需要的是一个函数名而不是一个函数模板名,即显示实例化函数模板432021-08-24 -
liuyubobobo
2017-01-17
楼上正解。由于VS编译器不是标准的C++实现,所以一些地方会和课程代码有出入。建议加入课程官方群,群公告中对一些这类地方有提示 :-)
222017-10-28 -
飞雷神面包
2017-01-24
非常感谢 遇到了同样的问题~~~~
00
相似问题
不能将函数模板用作函数参数
回答 1
传入函数指针作为参数啥意思呢老师
回答 1
函数参数是一个函数是什么意思?没明白
回答 1
不能从重载函数类型推导模板参数?
回答 2
dfs函数中的问题
回答 3