首页 > 解决方案 > 尝试返回向量时收到错误“E0415”

问题描述

尝试从函数完成后返回完成的冒泡排序,我得到了这个:

E0415 不存在合适的构造函数来从 "std::vector<double, std::allocator<double>> *" 转换为 "std::vector<double, std::allocator<double>>"

这是代码

class BubbleSort : SortingAlogrithm
{
    void swap(double *xp, double *yp)
    {
        double temp = *xp;
        *xp = *yp;
        *yp = temp;
    }
public:
    vector<double> Sort(vector<double> &newVect, int arraySize)
    {
        cout << "Bubble sort algorithm commencing" << endl;
        int i, j;
        for (i = 0; i < arraySize - 1; i++)

            // Last i elements are already in place    
            for (j = 0; j < arraySize - i - 1; j++)
                if (newVect[j] > newVect[j + 1])
                    swap(&newVect[j], &newVect[j + 1]);
        cout << "Ordered List: ";
        for (int i = 0; i < arraySize; i++)
        {
            cout << newVect[i] << " ";
        }
        return &newVect;
    }
};

标签: c++functionstdvector

解决方案


return &newVect;

语法不正确,因为返回类型是std::vector<double>并且&newVect是类型std::vector<double>*

这就是编译器所抱怨的。

你需要使用

return newVect;

改进建议

最好将返回类型更改为引用,这样您就不会在调用函数时强制调用函数进行复制。

vector<double>& Sort(vector<double> &newVect, int arraySize)
{
   ...
   return newVect;
}

最好将返回类型更改为,void因为调用函数具有正在排序的对象。

void Sort(vector<double> &newVect, int arraySize)
{
   ...
   // Not return statement
}

推荐阅读