Ошибка при вызове функции с использованием указателей в качестве параметра

0

Сообщение об ошибке:

main.cpp: In function 'int main()':
main.cpp:39:52: error: expression list treated as compound expression in initializer [-fpermissive]
  int* concatArray (*pArray1, size1, *pArray2, size2);
                                                    ^
main.cpp:39:52: error: invalid conversion from 'int' to 'int*' [-fpermissive]

В строке 39 моего кода я называю функцию concat; Я никогда не видел эту ошибку раньше, и я не знаю, как ее решить.

#include <iostream>
#include <cstdlib>

using namespace std;

int* concatArray (int* pArray1, int size1, int* pArray2, int size2);

int main (){

    int size1 = 8;
    int Array1 [size1];
    for (int i = 0; i < size1; i++){
        Array1[i] = rand() % 10;
    }

    int size2 = 10;
    int Array2 [size2];
    for (int i = 0; i < size2; i++){
        Array2[i] = rand() % 10;
    }

    int* pArray1;
    int* pArray2;
    pArray1 = Array1;
    pArray2 = Array2;

    cout << "The first array contains: " << endl;
    for (int i = 0; i < size1; i++){
        cout << Array1[i] << endl;
    }

    cout << "The second array contains: " << endl;
    for (int i = 0; i < size2; i++){
        cout << Array2[i] << endl;
    }

    int* concatArray (*pArray1, size1, *pArray2, size2);

    cout << "the concat array contains: " << endl;
    for (int i = 0; i < size1 + size2; i++) {
        cout << (concatArray + i) << endl;
    }
    return 0;
}

int* concatArray (int* pArray1, int size1, int* pArray2, int size2){

    int* concatArray = new int [size1 + size2];
    for (int i = 0; i < size1 + size2; i++) {
        if(i < size1){
            *(concatArray + i) = *(pArray1 + i);
        }
        else{
            *(concatArray + i) = *(pArray2 + i);
        }
    }
    return concatArray;
}   
  • 0
    Пожалуйста, избегайте указателей и возврата выделенной памяти
Теги:
pointers
function

2 ответа

3
Лучший ответ
int* concatArray (*pArray1, size1, *pArray2, size2);

Это запутывает синтаксис для объявления переменной и вызова функции. Чтобы избежать путаницы, вы должны выбрать другое имя для переменной и инициализировать ее с результатом вызова функции.

Это должно исправить первую ошибку; второй - потому что первый и третий аргументы должны быть указателями; но вы разыскиваете указатели, чтобы получить значения int они указывают.

Так что это должно быть что-то вроде

int* concatenated = concatArray(pArray1, size1, pArray2, size2);

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

  • 0
    Огромное спасибо; он компилировался с ошибками во время выполнения, но их было просто исправить - ошибки указателя не так много (для меня)
  • 0
    @ user3358702 Вы видите, что другие пишут для вас.
0

Это выражение

int* concatArray (*pArray1, size1, *pArray2, size2);

является недействительным.

На самом деле это выглядит как определение указателя на int с именем concatArray и некоторыми аргументами.

Более того, если вы имели в виду вызов функции concatArray и если бы вы правильно ее записывали

int *SomePointer = concatArray (*pArray1, size1, *pArray2, size2);

тем не менее его calli также недействителен, потому что вместо указателей вы передаете в качестве аргументов объекты типа int: * pArray1 и * pArray2.

Учтите, что размеры массивов должны быть постоянными выражениями в C++. Итак, этот код

int size1 = 8;
int Array1 [size1];
//...
int size2 = 10;
int Array2 [size2];

не соответствует C++.

Также этот цикл в функции

for (int i = 0; i < size1 + size2; i++) {
   if(i < size1){
      *(concatArray + i) = *(pArray1 + i);
      }
   else{
      *(concatArray + i) = *(pArray2 + i);
      }
}

является недействительным. Вместо

*(concatArray + i) = *(pArray2 + i);

там должен быть

*(concatArray + i) = *(pArray2 + i - size1);

Ещё вопросы

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