模板调用函数错误-没有匹配函数可调用'bubbleSort'

时间:2019-04-22 22:59:20

标签: c++

没有用于调用“ bubbleSort”的匹配函数。 我在同一个.hpp文件中有这两个功能。

template<typename T>
void bubbleSort(std::vector<T> &vec){
    T zacasen;
    for (int i=0; i<vec.size(); i++) {
        for (int j=0; j<vec.size()-1; j++) {
            if(vec[j]>vec[j+1]){
                zacasen=vec[j];
                vec[j]=vec[j+1];
                vec[j+1]=zacasen;
            }
        }
    }
}

template < int N, typename T >
void sort(const std::vector<T> &vec){
    if(N==1){
        bubbleSort(vec);
    }else if(N==2){
        //quicksort(vec, 0, vec.size());
    }
}

1 个答案:

答案 0 :(得分:2)

你有

void bubbleSort(std::vector<T> &vec)

但是

void sort(const std::vector<T> &vec)

您不能从bubbleSort(vec)内部调用sort,因为const std::vector<T>不是std::vector<T>(请注意const),并且没有隐式转换可能将其变成一个的序列。因此,这里没有可行的函数可供重载解析使用……

为什么您的sort首先要求一个const向量?由于它不返回新的向量,因此它可能执行其名称所暗示的唯一操作的方法是重新排序(即修改)其给定向量的内容!?