2010-02-02 33 views
0
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

人們應該閱讀C++ FAQ。這是那些經常出現和去往的問題之一,並且在那裏很好地解釋 - 如何實施。 http://www.parashift.com/c++-faq-lite/(特別閱讀13.10關於如何創建一個矩陣類) – 2010-02-02 12:03:21

回答

1

您已定義的方法追加採取double類型的1-d陣列。但是在這個函數中,你正在使用它作爲一個二維數組。

每個鏈接列表節點中的數據都是double的2-D數組。

所以,你所有的成員函數都應該接受一個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]); 
5

傳入的num是單個double指針,但您試圖用兩個下標對其進行索引。如果您確實傳遞了4x4 double數組,請更改函數簽名以表明它是這樣的。

0

您正在將num編入索引,就好像它是2D數組或雙指針一樣,而它只有一層深度。

double* num

num[i][j]

2

「民」 有一個單一的間接所以你不能解除引用兩次。聲明爲

double (*num)[4] 

如果您希望它接受2D矩陣,以便您可以將[]應用於它兩次。

+0

我會去'double num [] [4]',因爲在這種情況下它更清晰,但道具提及間接的程度。 – 2010-02-02 11:55:11

0

您也可以使用num [i * 4 + j]來訪問您需要的數據。