class linklist4x4
{
private:
struct node4x4
{
double data[4][4];
node4x4 *link;
}*p;
public:
linklist4x4();
void append( double* num );
void add_as_first( double* num );
void addafter( int c, double* num );
//void del( double* num );
void display();
int count();
double* getdata(int c);
~linklist4x4();
};
以上是我的班级声明。
现在下面是一个函数声明。
void linklist4x4::append(double* num)
{
node4x4 *q,*t;
if( p == NULL )
{
p = new node4x4;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
p->data[i][j]=num[i][j];//error line
p->link = NULL;
}
else
{
q = p;
while( q->link != NULL )
q = q->link;
t = new node4x4;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
t->data[i][j]=num[i][j];//error line
t->link = NULL;
q->link = t;
}
}
当我尝试编译时,它会在标记的注释行中给出一个错误,指出“错误C2109:下标需要数组或指针类型”,如图所示。
有人可以帮忙吗?
答案 0 :(得分:5)
传入的num
是一个double
指针,但您尝试使用两个下标对其进行索引。如果您确实传入了一个4x4 double
数组,请更改函数签名以表明它是这样的。
答案 1 :(得分:2)
“num”具有单个间接,因此您无法取消引用它两次。声明为
double (*num)[4]
如果您希望它接受2D矩阵,那么您可以将[]应用于它两次。
答案 2 :(得分:1)
您已将方法append定义为采用double类型的1-D数组。但是在函数中,你将它用作二维数组。
每个链接列表节点中的数据都是double的二维数组。
所以你的所有成员函数都应该接受double作为参数的二维数组。
变化:
void append( double* num );
void add_as_first( double* num );
void addafter( int c, double* num );
到
void append( double num[][4] );
void add_as_first( double num[][4] );
void addafter( int c, double num[][4] );
答案 3 :(得分:0)
您将num
编入索引,就像它是2D数组或双指针一样,而它只有一个深度。
double* num
num[i][j]
答案 4 :(得分:0)
您也可以使用num [i * 4 + j]来访问所需的数据。