2014-03-25 176 views
0

我檢查的鏈接Can I overload CArchive << operator to work with std::string?有關超載的字符串類型,我用與CArchive的運算符重載<<

CArchive& operator<<(CArchive& ar, string lhs) 
{ 
    int size_t = lhs.size(); 
    ar << size_t; 
    ar.Write(lhs.c_str(), size_t); 
    return ar; 

} 

CArchive& operator>>(CArchive& ar, string lhs) 
{ 
    int size_t = lhs.size(); 
    ar >> size_t; 
    lhs.resize(size); 
    ar.Read(&lhs[0], size); 
} 

而且我在頭功能的朋友說的重載運算符。

class CArrow : public CObject 
{ 
    DECLARE_SERIAL(CArrow) 
    friend CArchive& operator<<(CArchive& ar, std::string lhs); 
    friend CArchive& operator>>(CArchive& ar, std::string lhs); 
    ... 
    ... 
} 

但是>>運算符給了我空白輸出。當我不作爲操作符使用時,只需讀寫我的序列化函數,它們僅適用於一個字符串變量。但是,我有多個字符串來存儲和加載。有沒有其他方式來序列化字符串類型?或者這個重載函數有什麼問題?

+0

您的>>運算符需要指定一個字符串的引用! 而你的<<運算符需要指定一個const引用。 – user1793036

+0

它工作。請寫下來,我會接受作爲答案。但我不明白爲什麼,請你幫我解釋一下嗎? –

回答

0

您的操作員>>似乎正在寫入大小而不是從ar讀取它。

您應該將MFC標籤添加到您的問題。

+0

我在我的問題中更正了運算符錯字,並添加了MFC標記。謝謝。但問題不是這樣。 –