有两个不同的类 a 与 b有一个相同的数据结构,问:1)a类要读取b类结构里的数据,或a类里结构里的数据写到b类结构里的数据?
    2)b类要读取a类结构里的数据,或b类里结构里的数据写到a类结构里的数据?
它们之间如何互相交换数据?//a.h
struct XYZ
{
  long X;
  long Y;
  long Z;
}first;//a.cpp
=============================================
//b.h
#include “a.h”

解决方案 »

  1.   

    在b.cpp中顶部用extern struct XYZ 

      long X; 
      long Y; 
      long Z; 
    }first; 
     即可
      

  2.   

    "在b.cpp中顶部用extern struct XYZ
    {
      long X;
      long Y;
      long Z;
    }first;
    即可"  意思说相当于一个公共变量,这肯定可以,==========================================================
    我到想把这数据结构,构成各自类的私有结构,封装起来,用它们的公共方法如何实现
    互相交换数据?   
      

  3.   

    struct XYZ 

      long X; 
      long Y; 
      long Z; 
    }first; class A{
      ...;
      XYZ * hItem;
    };class B{
      ...;
      XYZ * hItem;
    };XYZ item;
    A m_a;
    B m_b;
    m_a.hItem=m_b.hItem=&item;//Do something you wanna do
    .....
      

  4.   

    memcpy(&(a.firstAata),&(b.firstData),sizeof(first));
      

  5.   

    再问一下,为了交换数据更加安全可靠,将数据结构封装在各自类里
    如下:
    class A{
      ...;
       struct XYZ
      {
      long X;
      long Y;
      long Z;
       }
    };class B{
      ...;
         struct XYZ
      {
      long X;
      long Y;
      long Z;
       }
    }; 这样是否安全?,可以相互交换数据吗?
      

  6.   

    再问一下,为了交换数据更加安全可靠,将数据结构封装在各自类里
    如下:
    class A{
      ...;
       struct XYZ
      {
      long X;
      long Y;
      long Z;
       }
    };class B{
      ...;
         struct XYZ
      {
      long X;
      long Y;
      long Z;
       }
    }; 这样是否安全?,可以相互交换数据吗?
      

  7.   

    友元就是在类定义中用friend关键字声明,例如:
    class a
    {
    friend class b;
    friend void c();
    };
    b、c都是a的友元,在b类中或者c函数中可以访问a的私有成员。
      

  8.   

    1. 使用友元
    1.1 使用友元函数   
    令class A为class B的友元类,或者A的某个成员函数成为B的友元函数,由于友元不具有对称性,所以此时B并不能作为A的友元类访问A的数据。
    这里,若使A的某个成员函数成为B的友元,我们假定这个成员函数如下定义
    int A::GetDatas()
    {
       //Todo:Add your real code here;
       return -1;
    }
        那么你应写出如下代码
    class B
    {
       //other Datas or Function of class B
       friend int A::GetDatas();
    };
       这里,域名指示符::指出友元函数GetDatas()是A的成员函数。
       这时,若要求B也要访问A的数据,只需仿照上面将B的成员函数在A中置为友元。
    1.2 使用友元类
       对如上代码作修改得
    class A
    {
       //Attributes of A
    };
    class B
    {
       //other Datas or Function of class B
       friend class A;
    };
       这样,使用A既可以访问B的数据。
    2. 使用引用
       这时,只需写出如下定义的成员函数即可。
    int A::GetDatas(B& DesBuffer)
    {
       DesBuffer.DataBuffer = Data;//Data in class A is the datas you want.
       return -1; 
    }int B::GetDatas(A& DesBuffer)
    {
       DesBuffer.DataBuffer = Data;//Data in class B is the datas you want.
       return -1; 
    }
      

  9.   

    1. 使用友元
    1.1 使用友元函数   
    令class A为class B的友元类,或者A的某个成员函数成为B的友元函数,由于友元不具有对称性,所以此时B并不能作为A的友元类访问A的数据。
    这里,若使A的某个成员函数成为B的友元,我们假定这个成员函数如下定义
    int A::GetDatas()
    {
       //Todo:Add your real code here;
       return -1;
    }
        那么你应写出如下代码
    class B
    {
       //other Datas or Function of class B
       friend int A::GetDatas();
    };
       这里,域名指示符::指出友元函数GetDatas()是A的成员函数。
       这时,若要求B也要访问A的数据,只需仿照上面将B的成员函数在A中置为友元。
    1.2 使用友元类
       对如上代码作修改得
    class A
    {
       //Attributes of A
    };
    class B
    {
       //other Datas or Function of class B
       friend class A;
    };
       这样,使用A既可以访问B的数据。
    2. 使用引用
       这时,只需写出如下定义的成员函数即可。
    int A::GetDatas(B& DesBuffer)
    {
       DesBuffer.DataBuffer = Data;//Data in class A is the datas you want.
       return -1; 
    }int B::GetDatas(A& DesBuffer)
    {
       DesBuffer.DataBuffer = Data;//Data in class B is the datas you want.
       return -1; 
    }