Сообщение об ошибке:
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;
}
int* concatArray (*pArray1, size1, *pArray2, size2);
Это запутывает синтаксис для объявление переменной а также вызов функции. Чтобы избежать путаницы, вы должны выбрать другое имя для переменной и инициализировать его в результате вызова функции.
Это должно исправить первую ошибку; вторая причина в том, что первый и третий аргументы должны быть указателями; но вы разыменовываете указатели, чтобы получить int
ценности, на которые они указывают.
Так что это должно быть что-то вроде
int* concatenated = concatArray(pArray1, size1, pArray2, size2);
Будем надеяться, что вскоре вы поймете, почему плохая идея манипулировать такими указателями, как исправить утечку памяти в вашем коде и как использовать библиотечные средства для более легкого управления памятью. Но это скорее выходит за рамки вопроса.
Это выражение
int* concatArray (*pArray1, size1, *pArray2, size2);
является недействительным.
Фактически это выглядит как определение указателя на int с именем concatArray и с некоторыми аргументами.
Более того, если вы имели в виду вызов функции concatArray и если бы вы написали правильно
int *SomePointer = concatArray (*pArray1, size1, *pArray2, size2);
тем не менее, его каллусы также недействительны, потому что вместо указателей вы передаете в качестве аргументов объекты типа 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);