使用类处理二维数组时遇到的一个小问题

时间:2010-02-02 11:45:14

标签: 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, 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:下标需要数组或指针类型”,如图所示。

有人可以帮忙吗?

5 个答案:

答案 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]来访问所需的数据。