关于testSort 参数列表中 void(*sort)(T[],int)的问题
来源:2-4 测试算法的性能
SD_Kaden
2018-05-17
我用老师您的代码原样打印下来,但会报错,反复测试后,觉得问题在函数调用上,即
testSort(参数列表) 参数列表中的 void(*sort)(T[],int)导致的,
相关的测试代码:
template<typename T>
void selectionSort(T arr[],int n)
{
for(int i=0;i<n;i++)
{
int index=i;
for(int j=i+1;j<n;j++)
if(arr[j]<arr[index])
index=j;
swap(arr[i],arr[index]);
}
}//在testSort 之前直接定义
template<typename T>
void testSort(string sortName,T arr[],int n)
{
clock_t startTime=clock();
selectionSort(arr,n); //直接地调用selectionSort函数
clock_t endTime =clock();
cout<<sortName<<" : "<<double(endTime - startTime)/CLOCKS_PER_SEC<<"s"<<endl;
return;
}
像上面那段调用就不会出错,但void(*sort)(T[],int)的调用 ,C++ 会报错:error C2896: 'void __cdecl sortTestHelper::testSort(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,void (__cdecl *)(T [],int),T [],int)' : cannot use function template 'void __cdecl selectionSort(T [],int)' as a function argument
这是不是 还是和 使用的编译器 是 VC6.0 有关?
1回答
-
liuyubobobo
2018-05-17
对!建议不要使用VC6。VC6支持的C++标准过于老旧。可以参考这里:https://coding.imooc.com/learn/questiondetail/49015.html :)
00
相似问题