2014-03-25 211 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标记。谢谢。但问题不是这样。 –