Ошибка «E0415» при попытке вернуть вектор - PullRequest
0 голосов
/ 26 марта 2019

Попытка вернуть завершенную сортировку пузырьков после ее завершения из функции, и я получаю это:

E0415 не существует подходящего конструктора для преобразования из "std :: vector"* "to" std :: vector"

Вот код

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;
    }
};

1 Ответ

1 голос
/ 26 марта 2019
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
}
...