cin / ofstream

时间:2016-08-09 15:52:57

标签: c++ ifstream ofstream c++98

引言及相关资料:

假设我有以下课程:

class Example
{
    int m_a;
    int m_b;
    public:
    // usual stuff, omitted for brevity
    friend ostream & operator<< (ostream & os, const Example &e)
    {
        return os << m_a << m_b;
    }
};

问题:

我想保留cin的默认行为,但在写入ofstream时采用以下格式:

m_a , m_b

我努力解决这个问题:

我试过在这里搜索,但没有发现任何类似的问题。

我尝试过在网上搜索,但仍然没有找到任何帮助。

我试图添加

friend ofstream & operator<< (ofstream & ofs, const Example &e)
{ 
    return ofs << m_a << ',' << m_b;
} 

进入类,但是产生了编译器错误。说实话,这种方法感觉不对,但在来这里寻求帮助之前我必须先尝试一下。

3 个答案:

答案 0 :(得分:2)

链接运算符时,所有标准<<都会返回ostream&引用。

然后您的return ...将无效,因为该值与ofstream&返回类型不匹配。

只需在用户定义的ostream&中使用operator<<即可。

答案 1 :(得分:0)

字符串的语法是"S",即使它是一个字符字符串。并且fstream采用字符串而不是字符。因此,这应该有效:

friend ofstream & operator<< (ofstream & ofs, const Example &e) 
{ 
    ofs << e.m_a << "," << e.m_b; // " instead of '
    return ofs;
} 

答案 2 :(得分:0)

我最初认为你在实现中忘记了对象e。

friend ostream & operator<< (ofstream & ofs, const Example &e)
{ 
   return ((ostream&) ofs) << e.m_a << ',' << e.m_b;
}

使用以下说明,在类中有2个参数的友元二元运算符是在类体中声明的本质外部方法。

但是在用clang ++编译后,ofstream&lt;&lt; int抱怨错误:二进制表达式('ofstream'(又名'basic_ofstream')和'int')的操作数无效,你还应该将强制转换添加到ostream。

实际上是&lt;&lt; int不知道是否应该使用ofstream&lt;&lt;等式或ostream&lt;&lt; int和歧义导致编译错误。

因此,您应该了解可能导致未来编译错误的重载。