我已将代码分成3个文件:main.cpp,array.h,array.cpp
我的代码要求用户输入方形2D矩阵的大小,并实现一些功能(转置,添加2个2D数组等)
我的array.cpp构造函数初始化一个大小为s的动态数组,并将所有条目都放到0。
Array::Array(int s)
{
// The constructor creates a dynamic array v[s][s], and set size to s.
// initialize all entries v[i][j] to 0.
int **v = new int*[s];
for(int i = 0; i < s; ++i)
v[i] = new int[s];
for(int i = 0; i < s; i++)
for(int j = 0; j < s; j++)
v[i][j] = 0;
}
Array::~Array()
{
// The destructor deletes v.
int arraysize = sizeof(v)/sizeof(v[0]);
for(int i = 0; i < arraysize; ++i)
{
delete [] v[i];
}
delete [] v;
}
这是我的main.cpp的一部分,我遇到了麻烦。 我有一个函数要求用户在我的主函数的顶部输入二维数组的条目,但我一直在收到错误&#34;键入&#39;数组&#39;不提供下标运算符&#34;
#include <iostream>
#include "array.h"
using namespace std;
// input array
void input(Array &C)
{
int i, j;
for(i = 0; C[i][0] == 0; i++)
for(j = 0; C[0][j] == 0; j++)
{
cin >> C[i][j];
}
}
int main(void)
{
//input size
int size;
cout << "Please input array size:" << endl;
cin >> size;
//input A, B
Array A(size), B(size);
cout << "Please input " << size << "x" << size << "integer array A:" << endl;
input(A);
cout << "Please input " << size << "x" << size << "integer array B:" << endl;
input(B);
........
我必须使用参数(Array&amp; C)作为输入函数,但我不确定如何更改输入函数的主体
答案 0 :(得分:1)
首先,表达式sizeof(v)/sizeof(v[0])
没有达到预期的效果。
这适用于静态分配的数组,而不适用于动态分配的数组。
sizeof
表达式在编译时被翻译,通过将其应用于操作数的类型。
在您的情况下,操作数为v
,其类型为int**
。
因此,sizeof(v)
相当于sizeof(int**)
,而sizeof(v[0])
相当于sizeof(int*)
。
您期望表达式sizeof(v)
为您提供v
指向的动态分配数组的大小,但编译器无法猜测(在编译时)在此期间此大小将是什么运行时。
关于手头的实际问题(正如在评论中已经提到的那样),您需要在Array
类中实现以下功能:
int* Array::operator[](int index) const {return v[index];}
int*& Array::operator[](int index) {return v[index];}
顺便说一句,在构造函数中声明一个名为v
的局部变量,将导致该局部变量的初始化,而不是在同名的成员变量的初始化中。