【发布时间】:2021-01-14 21:44:39
【问题描述】:
请告诉我可能是什么问题。我有 2 个自己的堆栈类(stackm 和 stackl)和堆栈排序功能:
template <class TStack>
void quick_sort_stack(TStack &s, TStack L, TStack G, TStack E) {
// Sort stack
}
为了对数组进行排序,我调用了函数:
template <typename T>
void quick_sort_stack(stackm<T> &s) {
quick_sort_stack(s, stackm<T>(s.size()), stackm<T>(s.size()), stackm<T>(s.size()));
}
template <typename T>
void quick_sort_stack(stackl<T> &s) {
quick_sort_stack(s, stackl<T>(), stackl<T>(), stackl<T>());
}
而且它有效。但是当我尝试对 std::stack 做同样的事情时
template <typename T>
void quick_sort_stack(std::stack<T> &s) {
quick_sort_stack(s, std::stack<T>(), std::stack<T>(), std::stack<T>());
}
我收到错误:
(no matching function for call to quick_sort_stack(std::stack<int> &, std::stack<int>, std::stack<int>, std::stack<int>)):
为什么会发生这种情况,我该如何解决?
【问题讨论】:
-
当您重新排序函数模板时会发生什么?您是否尝试将实现功能放在包装器之上?
-
@storyteller-unslander-monica 是的,它确实有效。不过这很奇怪,因为它们都在主要的排序功能之上。非常感谢。
-
嗯,C++ 对名称查找非常讲究。所以通常情况下,除非在第一个使用点之前声明它们,否则它们是不可见的。
-
奇怪的是其余选项都起作用了,尽管它们在上面。
标签: c++ function sorting templates stack