![](/img/trans.png)
[英]C++ Error: no matching function for call to 'std::vector<int>::swap(std::vector<int>)'
[英]No matching function for call to 'merge(std::vector<int>&, std::vector<int>&)
#include <iostream>
#include <algorithm>
#include <vector>
std::vector <int> mergesort(std::vector <int> list)
{
int n = list.size();
if(n == 1)
{
return list;
}
std::vector<int> v2(list.begin(), list.begin() + list.size()/2),
v3(list.begin() + list.size()/2, list.end());
v2 = mergesort(v2);
v3 = mergesort(v3);
return merge(v2, v3);
}
std::vector <int> merge(std::vector <int> list1, std::vector <int> list2)
{
std::vector <int> list3;
while(list1.size() > 0 && list2.size() > 0)
{
if(list1[0] > list2[0])
{
list3.push_back (list2[0]);
list2.erase (list2.begin());
}
else
{
list3.push_back (list1[0]);
list1.erase (list1.begin());
}
}
while(list1.size() > 0)
{
list3.push_back (list1[0]);
list1.erase (list1.begin());
}
while(list2.size() > 0)
{
list3.push_back (list2[0]);
list2.erase (list2.begin());
}
return list3;
}
int main()
{
}
我在第16行出現錯誤,錯誤是:
No matching function for call to 'merge(std::vector<int>&, std::vector<int>&)
我在return merge(v2,v3);
做錯什么嗎merge(v2,v3);
?
通過判斷錯誤是否與指針有關?
我嘗試過聲明為指針向量,以查看是否可行,但沒有成功。
您必須在引用之前聲明合並功能:
extern std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);
return merge(v2, v3);
C ++與C一樣,從上到下讀取。 在mergesort
中調用merge
,該功能不存在。 反轉實現或在mergesort
上方聲明merge
。
在C ++中,必須在調用函數之前聲明它們。
將merge
的整個定義移到頂部(將其放置在mergesort
之前),或在頂部預聲明merge
:
std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.