typedef struct _A
{
 int a;
 int b;
}A;
typedef struct _B
{
 int c;
 CArray<A,A> arr_a;
}B;
typedef strcut _C
{
 CArray<B,B> arr_b;
}C;
有个C对象
有个B对象
C m_c;
B m_b;
怎么把C其中的一个复制给B;m_b = m_c.GetAt(2);//不行m_b.c = m_c.GetAt(2).a;
m_b.arr_b .Copy(m_c.GetAt(2).arr_b);
也不行

解决方案 »

  1.   

    你这些操作不行的原因,在于你的A和B结构没有定义拷贝构造函数。
    一个解决的办法是,CArray中保存指针。比如CArray<B*,B*> arr_b;CArray<A*,A*> arr_a;
    然后用指针获取。C m_c; B* m_b = m_c.GetAt(2);就可以了。
    另一个办法就是定义拷贝构造函数了。
      

  2.   

    要是行就奇怪了 :)你重载了运算符 "=" 吗?如果没有那么m_b = m_c.GetAt(2);这样的语句就无法执行。
      

  3.   

    不懂你想干什么.
    想对成员变量赋值的话,用.操作符:
    m_c.arr_b.Add(m_b) ;
    或m_b = m_c.arr_b.GetAt(1) ;//条件:B支持=操作符.
      

  4.   

    我知道可以用指针,但是整个程序用指针不够现实
    我必须全部改成CArray的实例。难道我要在结构体里面重载=?
      

  5.   

    是的。你应该重载一下'='。
    void operator =( const B& srcB);
      

  6.   

    结构也是可以有成员函数的,当然你也可以把它改成类。
    在使用CArray时必须要重载自定义类的赋值运算符,要不然会出错的。
      

  7.   

    应该是:
    m_b = m_c.arr_b.GetAt(2);
      

  8.   

    ymbymb() ( ), m_b是m_c的一个成员,而不是m_c.arr_b的一个成员啊。 
      

  9.   

    typedef strcut _C 写错了, 应该是
    typedef struct _C
      

  10.   

    。。
    老大,我在这里错误,不是简单的语法错误阿。
    我写在这里手误而已,
    关键是怎么解决复制的问题。我程序里面也是struct。
      

  11.   

    我把结构改称
    typedef struct _A
    {
     int a;
     int b;
    }A;
    typedef CArray<A,A> B;
    typedef CArray<B,B> C;
    typedef CArray<C,C> D;他们还不能通过 x =y.GetAt(i);的方式来复制
    这个我真的不知道怎么重载了
      

  12.   

    你的结构很不合理。要我看。那个
    typedef strcut _C
    {
     CArray<B,B> arr_b;
    }C;里面什么也没加定义他干吗。不是在这儿添乱吗???要我
    先把这个去掉。改为CArray<B,B> arr_b;
    脱掉一层壳再说。哪有这么麻烦的。
    然后直接操作arr_b,问题简单了三分之一。剩下的。如果
    typedef struct _A
    {
     int a;
     int b;}A;能写成
      

  13.   

    typedef struct _A
    {
     int a;
     int b;
    int c;
    }A;
    然后CArray<A,A> arr_a;
    大不了平时c赋值为空,那么结构简单很多。平时不用不就完了吗??然后你怎么操作都行啊??怎么会这么麻烦。我不解你的结构。嵌套多了自然出问题
      

  14.   

    大不了你发程序到我这里我给你改。这么难吗??我就不信。根据我的感觉可以解决
    [email protected]
      

  15.   

    忙了我一天了,,
    高手,我已经基本解决,剩下一个赋值不了的问题:
    //dd是四层数组
             dd.GetAt(0).GetAt(0).m_arr_A.GetAt(0).na =2; //编译不过
    cout<<dd.GetAt(0).GetAt(0).m_arr_A.GetAt(0).na<<endl;
      去掉编译不过的语句,可以正常输出
     
    D:\test\testArray2.cpp(32) : error C2106: '=' : left operand must be l-value
    不知道什么意思
      

  16.   

    const_cast<A*>(&(dd.GetAt(0).GetAt(0).m_arr_A.GetAt(0)))->na=1;
    cout<<(&(dd.GetAt(0).GetAt(0).m_arr_A.GetAt(0)))->na<<endl;
    通过,可是值怎么改变不了