2012-07-29 50 views
0

所以我做了一个对象的序列化,但我有几个问题。 下面是代码:C++几个对象序列化

#include <iostream> 
    #include <fstream> 
    #include <string> 
    using namespace std; 
    class MyTest 
    { 
    private: 
     string test; 
    public: 
     MyTest():test(""){}; 
     void setTest(const string& test) {this->test = test;}; 
     string getTest() const {return this->test;}; 
    }; 
    void writeToFile(const MyTest& m) 
    { 
     ofstream ofs("data.mbp", ios::app|ios::binary); 
     ofs.clear(); 
     ofs.write((char *)&m, sizeof(m)); 
     ofs.flush(); 
     ofs.close(); 
     return; 
    }; 
    MyTest& readTest(MyTest& m,int num) 
    { 
     ifstream ifs; 
     ifs.open("data.mbp", ios::in|ios::binary); 
     for (int i = 1 ; i <= num ; i++) 
      ifs.read((char *)&m, sizeof(m)); 
     return m; 
    } 

    int main(int argc,char* argv[]) 
    { 
     MyTest m,t; 
     m.setTest("Hello"); 
     writeToFile(m); 
     t.setTest("World"); 
     writeToFile(t); 
     t = readTest(t,1); 
     cout << t.getTest() << endl; 

     m = readTest(m,2); 
     cout << m.getTest() << endl; 


     return 0; 
    } 

的问题是,我不知道如何在二进制文件中写入两个或多个对象,之后我怎么能阅读。 有人知道吗?

在此先感谢。

+0

你做错了第一个地方 - 'std :: string'使用动态分配的内存,并且即使在编写时你也不能处理... :( – 2012-07-29 19:29:15

+0

我必须承认我是一个java开发人员:) – 2012-07-29 19:30:10

+0

您忘记了序列化数据!例如,你的'writetofile'打开一个文件,将* not *序列化的数据写入文件,并刷新并关闭它。你写的数据现在是无稽之谈。 (如果你认为它是合理的,那么回答我:第一个字节包含什么?最后一个字节包含什么?你有* no *想法,因为你从来没有序列化过它!) – 2012-07-29 19:35:54

回答

4

我建议你使用Boost - 序列化在C++对象序列化:http://www.boost.org/libs/serialization/

+0

好的,但我甚至不知道如何使用这个库。我昨天下载并编译了它,但我不知道如何使用它并将其放入VS 2010 – 2012-07-29 19:33:06

+1

请参见[Windows入门](http://www.boost.org/doc/libs/1_35_0/more/getting_started /windows.html)或[在VC++ 2010项目中使用Boost序列化库](http://stackoverflow.com/questions/4879665/use-boost-serialization-library-in-vc-2010-project) – SailAvid 2012-07-29 19:37:56

+0

有点问题与升压: 1> LINK:致命错误LNK1104:无法打开文件'libboost_serialization-vc100-mt-gd-1_50.lib' – 2012-07-29 19:59:31

2

有很多的这样做的不同的方法。您需要先选择一种文件格式。首先想想XML。复杂数据结构的序列化更好地基于一些现有的库,而不是从头开始编写它。在这些库中搜索Inet。

+0

请问你能给我一些序列化和xml的例子吗? – 2012-07-30 08:14:46

+0

我有多次用于拾取/存储数据的通用XML解析器/扫描程序。如果您有兴趣,请在http://cdsan.com/Contacts.php给我留言。 – 2012-07-30 13:57:27