2012-07-29 48 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