【问题标题】:No matching function for call to 'merge(std::vector<int>&, std::vector<int>&)没有匹配函数调用 'merge(std::vector<int>&, std::vector<int>&)
【发布时间】:2016-05-02 20:14:47
【问题描述】:
#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>&)

我在返回 merge(v2,v3); 时做错了吗?

通过判断错误是否带有指针?

我尝试将其声明为指针向量以查看是否可行,但它没有。

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    C++ 和 C 一样,从上到下读取。在调用mergemergesort 中,该函数不存在。反转实现或在mergesort 上方声明merge

    【讨论】:

      【解决方案2】:

      你必须在引用之前声明合并函数:

      extern std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);
      return merge(v2, v3);
      

      【讨论】:

        【解决方案3】:

        在 C++ 中,您必须在调用函数之前声明函数。

        要么将merge的整个定义移到顶部(放在mergesort之前),要么在顶部预先声明merge

        std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-18
          • 1970-01-01
          • 2018-12-05
          • 1970-01-01
          • 2020-01-26
          • 2022-01-19
          相关资源
          最近更新 更多