エラーメッセージ:
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);
これは、変数を宣言して関数を呼び出すための構文を混乱させています。混乱を避けるために、変数に別の名前を選択し、関数を呼び出した結果で初期化する必要があります。
これで最初のエラーが修正されるはずです。2つ目は、1番目と3番目の引数がポインターである必要があるためです。ただし、ポインタがint
指す値を取得するためにポインタを逆参照しています。
だからこれは次のようなものでなければなりません
int* concatenated = concatArray(pArray1, size1, pArray2, size2);
うまくいけば、このようなポインタをジャグリングするのが悪い考えである理由、コードのメモリリークを修正する方法、およびライブラリ機能を使用してメモリをより簡単に管理する方法をすぐに理解できるでしょう。しかし、それは質問の範囲をかなり超えています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加