ошибка: недопустимые типы ‘double * [double]’ для индекса

Я пытаюсь создать программу, которая будет помещать все действительные числа в массив — с упорядочением чисел, выполняемых в отдельной функции — в порядке убывания, и распечатывать их.

Ниже приведена программа, которая у меня пока есть, но, по словам компилятора, есть две проблемы с ней:
(i) В строке 22 ("return N[t];"), Я получил «error: invalid types 'double*[double]' for array subscript».
(ii) В строке 28 («cout << sort_array(Q[100]) << " " "), Я получил «error: cannot convert 'double' to 'double*' for argument '1' to 'double* sort_array(double*)'».

Я не совсем понимаю, почему возникают эти две ошибки, но я бы хотел помочь в их устранении.

#include <iostream>
#include <cstdlib>

using namespace std;

double *sort_array (double *N) {
double t;
int size=100, a, b;

for (t=0; t<size; t++)
*N = rand()%250;

for (a=1; a<size; a++) {
for (b=size-1; b>=a; b--) {
if (N[b-1] < N[b]) {
t = N[b-1];
N[b-1] = N[b];
N[b] = t;
}
}
}
return N[t];
}

int main()
{
double Q[100];
cout << sort_array(Q[100]) << " ";
cout << endl;return 0;
}

1

Решение

Проблема заключается в sort_array(Q[100]) заявление. Это говорит компилятору вызвать sort_array с 101-м двойным в Q массив (который на самом деле выходит за пределы). Вы действительно хотели просто пройти Q вместо Q[100],

Однако обратите внимание, что при передаче массивов в стиле C double* например, теряет информацию о длине и не является каноническим C ++. Вместо этого вы можете использовать vector нести массив и размер с ним.

РЕДАКТИРОВАТЬ: И так как вы изменяете данные на месте, ваша функция вообще не должна ничего возвращать. Измените его на void и просто пропустите возврат в конце. Затем вам придется перебирать вектор / массив, чтобы распечатать каждый из элементов. cout не предоставляет встроенную возможность печати агрегатов.

Наконец книга из Полное руководство и список книг C ++ может помочь вам освоить концепции C ++.

0

Другие решения

Первая ошибка, потому что N[t] это double (это означает, что N«), но ваша функция возвращает double*, Ваша функция на самом деле не должна ничего возвращать. Сортирует данные, на которые указывает Nтак что возвращать ничего не нужно. Вы должны, вероятно, переключиться на void возвращаемое значение

Вторая ошибка заключается в том, что Q[100] это double (это означает «101-й элемент Qчто в любом случае является ошибкой, так как последний элемент Q является Q[99], так как индексы массива в C ++ начинаются с 0, а не с 1), но ваша функция ожидает double, Я предполагаю, что вы на самом деле хотите сделать следующее:

sort_array(Q)

передать указатель на первый элемент напрямую.

Помните, что при передаче массивов вам нужно только передать адрес первого элемента массива. В этом случае, Q, что эквивалентно &Q[0] но легче написать.

0

По вопросам рекламы [email protected]