使用iostream进行C ++编译错误

时间:2011-01-17 15:03:26

标签: c++ inheritance iostream

我正在使用fstream并遇到一些错误。

这就是我所拥有的:

class CLog
{
    void printOn(std::ostream& dbg) const;
}

void operator>>(const CLog& s, std::ofstream& dbg)
{
    s.printOn(dbg);
}

但是当我编译时出现以下错误:

error C2664: 'printOn' : cannot convert parameter 1 from 
'class std::basic_ofstream<char,struct std::char_traits<char> >' to 
'class std::basic_ostream<char,struct std::char_traits<char>  > &' 
A reference that is not to 'const' cannot be bound to a non-lvalue

我认为ofstream继承自ostream,为什么不可能呢?

由于

3 个答案:

答案 0 :(得分:6)

更正确的输出操作符声明如下:

std::ostream& operator << (std::ostream& dbg, const CLog& s)
{
    s.printOn(dbg);
    return dbg;
}

答案 1 :(得分:2)

将printOn设为public并包含fstream header :)。

#include <fstream>
class CLog
{
public:
    void printOn(std::ostream& dbg) const
    {

    }
};

std::ofstream & operator<<( std::ofstream& dbg, const CLog& s)
{
    s.printOn(dbg);
}

答案 2 :(得分:1)

我建议发布完整的代码,以便重现问题。我没有:

#include <fstream>

class CLog
{
public:
    void printOn(std::ostream& dbg) const;
};

void operator>>(const CLog& s, std::ofstream& dbg)
{
    s.printOn(dbg);
}
相关问题