ни один оператор «<<» не соответствует этим операндам (массивы переменной длины)

0

У меня возникают проблемы с назначением кодирования в моем классе C++. Назначение требует, чтобы мы имели массивы переменной длины, вызванные функциями. Я всегда получаю ошибку в названии, когда пытаюсь вызвать функцию в главном. Я видел другие вопросы, подобные этому, но я не могу представить ответы, которые решили, что любой из них работает в моей собственной программе.

    '# include <iostream> //Allows user input
using namespace std;

int i, hold; //Global variables for use in functions and loops through-out the program.
 //Functions below main.

int main()
{
    int length=0;
    int* a = new int[length];; //This array has 'length' spaces.
    cout << "How many numbers would you like to sort?\n";
    cin >> length;
  for(i=0;i<length;i++) //This loop populates the array.
  {
    cout << "Enter a number.\n";
    cin >> a[i];
  }
cout << "This doesn't work ->" << sortDescending(a, length) << endl;
cout << "This also doesn't work" << shiftRight(a, length) << endl;
return 0;
}

И вот сами функции.

    void sortDescending(int a[], int length) //Sorts the numbers in the array in descending order.
{
for(i=0;i<length;i++)
{
    if(a[i]<a[i+1]) //Detects if the first number is smaller than the second.
    { //If the first is smaller than the second then this swaps them.
        hold=a[i];
        a[i]=a[i+1];
        a[i+1]=hold;
    }

}
}

void shiftRight(int a[], int length)
{
for(i=0;i<length;i++)
{
    a[length-i]=a[length-(i-1)];
}
}
  • 1
    Вы выделяете прежде чем вы получите a length . Вы должны переключить это.
Теги:
arrays

2 ответа

1

Две функции sortDescending() и shiftRight() - обе функции возврата void. Функция, возвращающая void, не имеет оператора return, и поэтому из вызова не может быть получено никакого значения. Поэтому попытка "распечатать" возвращаемое значение функций в следующем коде будет неизменно терпеть неудачу:

... << sortDescending(a, length) << ...
... << shiftRight(a, length)     << ...

Я сделаю шаг и предположим, что вы пытаетесь напечатать фактический массив. Это можно сделать просто с помощью цикла for после вызова функций:

sortDescending(a, length);
std::cout << "After sortDescending(): ";

for (int i = 0; i < length; ++i)
{
    std::cout << a[i] << " ";
}
std::cout << std::endl;

shiftRight(a, length);
std::cout << "After shiftRight(): ";

// Do the same as the above

Для дальнейшего удобства вы можете даже распечатать массив в двух функциях. Но это задача, которую я оставлю вам. :)

  • 0
    Подсказка фактически требует, чтобы мы использовали эти точные заголовки. Они включали пустоту. Любой совет, как это обойти?
  • 0
    @ user3427139 Я не уверен, что вы подразумеваете под "точными заголовками". Кроме того, как решение, которое я показал выше, не обходит это?
Показать ещё 6 комментариев
0

Не используйте функцию сортировки. библиотека алгоритмов использования

#include <algorithm>

затем выполните сортировку следующим образом:

cout << "This will work" << sort(a, a+length) << endl;
  • 0
    std::sort() возвращает void поэтому я не знаю, что должен делать ваш пример кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню