请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

不能将函数模板用作函数参数

错误显示为“不能将函数模板用作函数参数”
SortTestHelper::testSort(“Selection Sort”, selectionSort, arr, n);
在这个地方报错,就是模板函数不能当成参数传入,但是我搜了一下解决方案
SortTestHelper::testSort(“Selection Sort”, selectionSortL《int》, arr, n);
加上《int》就解决了,说是“这里需要的是一个函数名而不是一个函数模板名,即显示实例化函数模板”
这句话怎么理解呢?

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2022-03-29 01:56:10

本小节课程的官方代码在这里:https://git.imooc.com/coding-71/coding-71/src/master/02-Sorting-Basic/Course%20Code%20%28C++%29/04-Selection-Sort-Detect-Performance


如果课程的代码不能在你的环境下运行,那么一定是因为你使用的 C++ 的编译器版本和课程不一致导致的语法区别。并且大概率的,你使用的是 VS。微软 VS 内置的编译器的标准和 C++ 组委会的标准不一致,有很多自己的标准(和微软的其他产品一样。甚至,你是用的 VS 的版本不一致,编译器的区别都挺大。这也是微软经常干的事儿。)。遇到这种问题,只能根据你现在使用的编译环境去调整语法规则。


最后,这句话的意思是:

对于一个模板函数

template<typename T>
void selectionSort(T arr[], int n)

来说:selectionSort 不是函数名,而是模板名。只有指明了模板的类型,把整个函数的模板部分“扔掉”了,比如 selectionSort<int>,编译器才把它作为函数名。而函数只能传入函数名,不能传入没有规定好模板的模板名。

但依然是,这只是你当前所使用的编译器的规定。


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 船帆 #1
    懂了懂了,谢谢bo哥
    回复 有任何疑惑可以回复我~ 2022-04-07 16:43:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信