2011-02-03 41 views
0

我的問題是如何訪問和修改一個類中定義的二維數組,這是與另一個類的朋友。下面是我的問題的一些細節:訪問兩個朋友類之間的二維數組

class A我聲明併爲我的二維數組(指針指針)u分配適當的空間。

Class A 
{ 
    public: 
    friend class B; 
    long double **u; 
    int fun; 
    void make(); 
}; 
void A::make() 
{ 
    long double **u = new long double *[nx]; 
    for (int i=0;i<nx;i++) 
    u[i] = new long double [ny]; 
    int fun = 9; 
} 

Class AClass B的朋友;我需要使用Class A中聲明的數組,其功能定義爲class B。下面是我的B級:

class B 
{ 
    public: 
    void get(A*); 
}; 

void B::get(A *pt) 
{ 
    using namespace std; 
    cout << pt->fun; 
    cout << pt->u[0][0]; 
} 

我得到我的第二COUT pt->u[0][0]一個總線錯誤。有沒有簡單的方法來使用這個設置我必須訪問我的u [] []數組?我認爲我得到的錯誤,因爲指針指向我的數組的第一個條目,因此我的整個二維數組作爲一行保存在內存中(這裏大聲思考)。我是一個Fortran傢伙,所以這個東西對我來說有點新鮮。

任何幫助或「指針」其他有用的線程將不勝感激。

謝謝!

阿爾貝託

+1

你叫`使()`第一... ? – 2011-02-03 00:08:44

+1

既然你是公開的,B類是A的朋友的事實並沒有真正發揮作用(如果我錯了,糾正我) – AlexJF 2011-02-03 00:11:01

+0

是的,我有一個函數可以調用make ()和get()當我編譯並運行代碼時,我得到了正確的「cout << pt-> fun」值 – Al007 2011-02-03 00:14:56

回答

4

我想是因爲A::u未初始化(在方法A::make初始化一個局部變量u你得到的錯誤,不是會員,你需要改變

void A::make() 
{ 
    long double **u = new long double *[nx]; // should be just u, or this->u. 
0

有一些問題與您的代碼:nxny似乎並沒有在任何地方定義,在make你不初始化A::fun可言,你不是設置名爲fun局部變量,立即超出範圍。

至於你的錯誤,它聽起來像這樣的錯誤源於make()尚未被pt調用的事實。確保在您傳遞給get的實例上調用make(),否則將不分配數組u