invalid types double int for array subscript

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

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

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

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

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

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

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

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

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

EDIT: И поскольку вы изменяете данные на месте, нет никакой необходимости в том, чтобы ваша функция вообще ничего не возвращала. Измените его на пустоту и просто пропустите возврат в конце. Затем вам придется перебирать вектор/массив, чтобы распечатать каждый из элементов. cout не предоставляет встроенные возможности для печати агрегатов.

Наконец, книга из The Definitive C++ Book Guide and List может помочь вам ускорить работу над концепциями C++.

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

Ошибки возникают в цикле while, который вводит данные из файла данных в массив.
Заменив Double i на int, я заменил старую проблему на

Решение

+ Изменить
void extract (double arr ,int n, double& i, int& error); в void extract (double* arr ,int n, double& i, int& error); как в определении, так и в декларации extract функция

Редактировать: другая ошибка из-за double переменная типа, используемая в качестве индекса массива, в вашем случае i в extract функция, так что либо изменить тип i в int или использовать i = static_cast (i) в самом начале функции извлечения я предпочитаю первый способ.

Здесь ссылка на сайт вашего кода вместе с внесенными изменениями, и он компилируется и работает отлично.

#include
#include
#include
using namespace std;
int minim(int mas,int siz)
<

int min; //минимальный элемент массива
min = mas[0];
for (int i = 0; i >size;
int* arr = new int[size];
cout >sluch1;
cout >sluch2;
for(int i=0;i Голосование за лучший ответ

Дальше какая-то чушь. Arr и arr — зачем две переменных?

Оцените статью