none
关于vector<CString>类型序列化的一个问题 RRS feed

  • 问题

  • void Ctext1Doc::Serialize(CArchive& ar)
    {
    int cont=vv.size();
    if (ar.IsStoring())

    {
    ar<<cont;
    for(int i=0;i<cont;i++)
    ar<<vv[i];
    }
    else
    {

                     CString bk;

     vv.clear();

                     ar>>cont;

    for(int i=0;i<cont;i++)
    {
    ar>>bk;

                                    vv.push_back(bk);              

    }
    // TODO: 在此添加加载代码
    }
    }

    保存数据没问题,但是恢复数据代码如何写,请高手指点,万分感谢。

    vv为vector<CString>类型全局变量


    2013年8月22日 5:58

答案

  • 找到问题所在了,直接ar >> vv[i]不行的因为程序刚打开时候vv这个动态数组(类型为vector<CString>),为空,所以无法直接存入数据,所以要先建立一个空数组,数组的大小可以根据存入的cont(数组条数)用一个循环语句和vv.push_back(TEXT(""));配合建立,之后就可以用ar >> vv[i]读取了。
    2013年8月22日 6:45

全部回复

  • 反过来写就行了嘛,ar >> vv[i].

    2013年8月22日 6:03
  • 反过来就写了这么简单我就不贴出来了嘛,编译通过,读取文件时候出错
    2013年8月22日 6:39
  • 反过来就写了这么简单我就不贴出来了嘛,编译通过,读取文件时候出错

    出什么错误,大哥,每次你提问,能否把问题尽量描述的详尽点。
    2013年8月22日 6:42
  • 找到问题所在了,直接ar >> vv[i]不行的因为程序刚打开时候vv这个动态数组(类型为vector<CString>),为空,所以无法直接存入数据,所以要先建立一个空数组,数组的大小可以根据存入的cont(数组条数)用一个循环语句和vv.push_back(TEXT(""));配合建立,之后就可以用ar >> vv[i]读取了。
    2013年8月22日 6:45
  • 大哥你真是好人那,以后小弟还要多多请教啊,知道啦下次把问题说的详细点
    2013年8月22日 6:52