Ошибка компиляции C ++ с iostream - PullRequest
1 голос
/ 17 января 2011

Я использую 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 ]

6 голосов
/ 17 января 2011

Более правильное объявление оператора вывода:

std::ostream& operator << (std::ostream& dbg, const CLog& s)
{
    s.printOn(dbg);
    return dbg;
}
2 голосов
/ 17 января 2011

Сделайте printOn общедоступным и включите заголовок fstream :).

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

    }
};

std::ofstream & operator<<( std::ofstream& dbg, const CLog& s)
{
    s.printOn(dbg);
}
1 голос
/ 17 января 2011

Я бы предложил опубликовать полный код, позволяющий воспроизвести проблему. У меня нет ни одного с:

#include <fstream>

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

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