传递vector作为参数时没有匹配的函数异常(C ++)

时间:2015-12-08 02:24:40

标签: c++ debugging compiler-errors

我在以下代码中遇到了一个奇怪的编译错误:

class Solution {
public:
    int function(vector<int>& nums) {
        //Did something
        int len = nums.size();
        int mid = len / 2;
        if (nums[mid] < nums[0]) {
            vector<int> newVec(nums.begin(), nums.begin() + mid);
            return function(newVec);
        }
        else 
            return function(vector<int>(nums.begin() + mid + 1, nums.end()));
    }
};

错误发生在: return function(vector<int>(nums.begin() + mid + 1, nums.end()));

在我看来,如果我先构造向量,然后将其传递给函数,它的工作完全正常。就像我在if下的块中所做的那样:

vector<int> newVec(nums.begin(), nums.begin() + mid);
return function(newVec);

但如果我将这两个步骤结合起来,则会发生错误。谁有人可以帮我解释一下?非常感谢〜

=============================================== ==========================

编辑:

编译错误是

no matching function for call to ‘Solution::function(std::vector<int>)’

1 个答案:

答案 0 :(得分:0)

vector<int>& nums左值参考。你必须传递一个左值。要允许这两种用途,请更改为vector<int> const &nums,无论如何都应该这样做 考虑重新设计function以首先接受迭代器范围。然后你可以运行你的整个算法只看一个缓冲区,而不是制作大量的部分副本                      - M.M