C++ 用类处理二维数组时的一个小问题

C++ 用类处理二维数组时的一个小问题,c++,class,multidimensional-array,C++,Class,Multidimensional Array,以上是我的班级宣言 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, doub

以上是我的班级宣言

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();
};
下面是一个函数声明

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(双*num)
{
节点4x4*q,*t;
if(p==NULL)
{
p=新节点4x4;
for(int i=0;ilink=NULL;
}
其他的
{
q=p;
而(q->link!=NULL)
q=q->link;
t=新节点4x4;
for(int i=0;ilink=NULL;
q->link=t;
}
}
当我尝试编译时,它在标记的注释行中给出了一个错误,如图所示:“errorC2109:subscript需要数组或指针类型”


有人能帮忙吗?

传入的
num
是一个单
double
指针,但您正试图用两个下标对其进行索引。如果您真的传入4x4
double
数组,请更改函数签名以表明它是这样的。

您正在索引
num
,就好像它是一个2D数组或doub一样le指针,而它只有一层深

double*num


num[i][j]

您已经定义了方法append以获取double类型的一维数组。但是在函数中,您将其用作二维数组

每个链接列表节点中的数据都是一个二维双精度数组

因此,所有成员函数都应该接受一个二维数组double作为参数

更改:

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;
 }
}

“num”只有一个间接寻址,因此您不能将其取消引用两次

void append( double num[][4] );
void add_as_first( double num[][4] );
void addafter( int c, double num[][4] );

如果您希望它接受2D矩阵,以便可以对其应用[]两次。

您也可以使用num[i*4+j]访问所需的数据。

我会选择
双num[]4]
因为这在本文中更清楚,但这是提到间接层次的道具。人们应该真正阅读C++常见问题解答。这是其中一个经常出现的问题,并且在那里得到了很好的解释-如何实现(特别是阅读13.10中关于如何创建矩阵类的内容)
double (*num)[4]