定义结构体如下:
typedef struct tagClassArray
{
CString classname1;
float ratio1;
CArray<CString,CString&> strArray1;
BOOL flag;
CString classname2;
float ratio2;
CArray<CString,CString&> strArray2;
}ClassArray;CArray<ClassArray,ClassArray&> clsarray;

for(int i=0;i<clsarray.GetSize();i++)
{
     ClassArray tmp;
     tmp=clsarray.GetAt(i);
    //这句赋值语句报错!

}
于此,我也写了一个类,我猜想是结构的层层嵌套使赋值操作出现问题。(类似与浅COPY和深COPY的问题)
所以我也写了一个类(与此结构体对应),并写了 operatro=()函数的。
但还是不行,
问高手:
如果我要这样的数据结构。应该如何做。?
如何操作?
谢谢,最好有代码(如果是类的话)。

解决方案 »

  1.   

    CArray这个类没有提供拷贝函数,需要将ClassArray定义成类,并完成相应的赋值与拷贝操作,如果你写了赋值操作的话应该没有问题的了
    不知你的赋值语句报错是报的什么错?
      

  2.   

    加上这3个试试
    typedef struct tagClassArray
    {
    CString classname1;
    float ratio1;
    CArray<CString,CString&> strArray1;
    BOOL flag;
    CString classname2;
    float ratio2;
    CArray<CString,CString&> strArray2;
             tagClassArray(){...}
    tagClassArray(const tagClassArray& ca)
    {
                  ...
    }
    tagClassArray& operator=(const tagClassArray& ca)
    {
                      ...
    return *this;
    }
    }ClassArray
      

  3.   

    是啊,我就是写了这三个的,我还是用类的形式写的,(VC中类和STRUCT)差不多吧?
    (不过不知道里面写对没有,)反正编译时没问题,但运行时就出问题了。!
    帮忙啊!
      

  4.   

    给我个例子,帮我写以下COPY CONSTRUTOR()
    写个例子。
      

  5.   

    你试试这样行不行
    typedef struct tagClassArray
    {
    CString classname1;
    float ratio1;
    CArray<CString,CString&> strArray1;
    BOOL flag;
    CString classname2;
    float ratio2;
    CArray<CString,CString&> strArray2;
    tagClassArray():ratio1(0),flag(TRUE),ratio2(0)
    {
    }
    tagClassArray(const tagClassArray& ca):classname1(ca.classname1),ratio1(ca.ratio1),flag(ca.flag),ratio2(ca.ratio2),classname2(ca.classname2)
    {
    for(int i=0;i<ca.strArray1.GetSize();++i)
    strArray1.Add(ca.strArray1.GetAt(i));
    for(i=0;i<ca.strArray1.GetSize();++i)
    strArray1.Add(ca.strArray1.GetAt(i));
    }
    tagClassArray& operator=(const tagClassArray& ca)
    {
    if(&ca==this)return *this;
    classname1=ca.classname1;
    ratio1=ca.ratio1;
    flag=ca.flag;
    ratio2=ca.ratio2;
    classname2=ca.classname2;
    strArray1.RemoveAll();
    for(int i=0;i<ca.strArray1.GetSize();++i)
    strArray1.Add(ca.strArray1.GetAt(i));
    strArray2.RemoveAll();
    for(i=0;i<ca.strArray1.GetSize();++i)
    strArray1.Add(ca.strArray1.GetAt(i));
    return *this;
    }
    }ClassArray;
      

  6.   

    还是同样的问题,主要在ClassArray tmp;
    声明这个变量的地方。
    好象提示CArray<CString,CString&>的赋值操作函数没找到?
      

  7.   

    好象是正确的,不过我的程序还是有点问题:(。
    调试的时候没有出现那个错误了,不过CArray<CString,CString&>的值好象还是没有赋值过去。