void drawTable(int arg[], int length);
int main()
{
int length=0;
int counter=0;
int *pointer2ArrSize = new int[length];
cout << "Enter length of array: " << endl;
cin >> length;
do{
for(int j=0; j<length; j++){
cout << "Enter array elements: \n";
cin >> pointer2ArrSize[j];
cout << "You entered: " << pointer2ArrSize[j] << " in position: "
<< j+1
<< endl;
counter++;
}
cout << drawTable(pointer2ArrSize[j],length) << endl;
}while(!counter == length);
return 0;
}
void drawTable(int arg[], int length){
for(int i=0; i<length; i++){
cout << arg[i] << " ";
cout << '/n';
}
}
错误:从'int'到'int *'[-fpermissive]
的无效转换
我的目标是显示2D可变长度数组。我希望用户定义数组及其元素的长度。但是,对向量还不太熟悉。我该如何处理?
答案 0 :(得分:0)
Key_firstTimestamp Key_groupNum Timestamp 7:58 PM 1 7:58 PM 7:58 PM 1 8:08 PM 7:58 PM 1 8:12 PM 8:15 PM 2 8:15 PM 8:15 PM 2 8:20 PM
是错误的,因为cout << drawTable(pointer2ArrSize[j],length) << endl;
的参数类型为drawTable
,并且您将int*
传递给它,类型为pointer2ArrSize[j]
。
您需要使用
int
更重要的是,使用
cout << drawTable(pointer2ArrSize, length) << endl;
错了。
从用户接受数组的值后,该数组将不会被调整为int *pointer2ArrSize = new int[length];
cout << "Enter length of array: " << endl;
cin >> length;
的大小。因此,length
将继续是大小为pointer2ArrSize
的数组。由于0
仍然是大小为pointer2ArrSize
的数组,因此任何尝试访问其元素的尝试都将导致未定义的行为。
在接受0
的输入值之后,移动分配内存的行。
length
最好还是使用cout << "Enter length of array: " << endl;
cin >> length;
int *pointer2ArrSize = new int[length];
。然后,您不必担心内存分配和释放。
std::vector
当然,您应该将cout << "Enter length of array: " << endl;
cin >> length;
std::vector<int> pointer2ArrSize(length);
更改为接受drawTable
。
std::vector<int>
不需要void drawTable(std::vector<int> const& arg);
作为length
的第二个参数,因为您可以从drawTable
获取数组的大小。