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);
我是 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);