C++ 小问题:不存在适合从 "void" 转换的构造函数

C++ minor problem: no suitable constructor exists to convert from "void"

我是 C++ 的新手,在尝试实现简单的递归算法时 运行 遇到了以下问题。问题是在基本情况 return 中突出显示 sorted_lst.push_back(last[0]) 并表示:no suitable constructor exists to convert from "void" to "std::__1::vector<int, std::__1::allocator<int>>"C/C++(415) 。现在,我看不到我的空白在哪里,因为我有一个 vector 而不是 void 的 return。在这种情况下,我什至不知道构造函数是什么,因为我有一个函数而不是 class?

vector<int> merge_sorting(vector<int> lst, vector<int> sorted_lst = vector<int>()) {

    if (lst.size() == 1){
        return sorted_lst.push_back(lst[0]);
    };
    vector <int> llst(lst.begin(), lst.begin() + (lst.size()/2));
    vector <int> rlst(lst.begin() + (lst.size()/2), lst.end());
    vector<int> a = merge_sorting(llst, sorted_lst);
    vector<int> b = merge_sorting(rlst, sorted_lst);
    // ...

std::vector<T>::push_back returns void

您可能打算 return sorted_lst 本身。

请在此处参阅 push_back 上的文档:https://en.cppreference.com/w/cpp/container/vector/push_back

正如 Tumblweed53 所指出的,您正在返回由 push_back 返回的空值。您可以改为执行以下操作:

vector<int> merge_sorting(vector<int> lst, vector<int> sorted_lst = vector<int>()) {

    if (lst.size() == 1){
        sorted_lst.push_back(lst[0]);
        return sorted_lst;
    };
    vector <int> llst(lst.begin(), lst.begin() + (lst.size()/2));
    vector <int> rlst(lst.begin() + (lst.size()/2), lst.end());
    vector<int> a = merge_sorting(llst, sorted_lst);
    vector<int> b = merge_sorting(rlst, sorted_lst);