2014-11-02 60 views
0

我是C++的初學者,所以我不確定這是否可行。我想知道是否可以從傳遞給函數的對象訪問動態2D數組。下面是簡化的代碼:如何從傳遞給C++函數的對象訪問動態二維數組?

類A:B

class A { 
public: 

    A(int length, int width) { 
     // initializes the 2d array 
    } 

    int** getArray() { return array2d;} 

    int getLength() { return length;} 

    int getWidth() { return width;} 

private: 

    int** array2d; 
    int length, width; 
}; 

類:

#include "A.h" 
class B { 
public: 

    B() {} 

    void print(A* a) { 

     int** temp = a->getArray(); // ERROR HERE 

     for (int i = 0; i < a->getLength(); i++) { 
      for (int j = 0; j < a->getWidth(); j++) 
       cout << temp[i][j] << endl; 
     } 
    } 

private: 

    int** array2d; 
}; 

Main.cpp的:

int main() { 
    A a = new A(15,15); 
    B b = new B(); 

    b->print(a); 
} 

我不斷收到此錯誤:Error 13 error C2086: 'int **A::array2d' : redefinition。我不知道我是否正確傳遞2D數組。我接受所有建議。誰能告訴我如何解決這個問題?謝謝。

讓我知道是否需要進一步解釋。

+0

什麼是您的文件的完整來源? – 2014-11-02 00:45:59

+0

@ Smith_61你是什麼意思全部來源?如果你的意思是所有的源代碼,那麼它太複雜和冗長了,所以我簡化了這個問題,作爲 – Alias 2014-11-02 01:06:47

+0

以上代碼中的一個例子,就像複製錯誤所需的整個代碼一樣。我們無法調試我們看不到的東西。 – 2014-11-02 01:20:07

回答

1

好吧,我想我發現了這個問題,錯誤號碼錶明你正在重新定義一些東西,我認爲它的名字是array2d,因爲在這兩個類中你都使用相同的名字。希望改變名字將有助於你。
而且我還建議您將函數void print(A* a)中的參數a的名稱更改爲void print(A* objA),可能問題在這裏。