2011-02-03 38 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