2011-01-17 3 views
1

Я использую fstream и получил некоторую ошибку.Ошибка компиляции C++ с помощью iostream

Вот что у меня есть:

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, так почему это не возможно?

Благодаря

+0

Arggg! обнаружили отсутствующий '#include '. Какой глупый выход из компилятора. Спасибо всем – mathk

ответ

2

Сделать 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); 
} 
+0

ПечатьOn был публичным fstream отсутствовал спасибо :). Но почему в этой ситуации вывод компилятора бесполезен. – mathk

+0

Да, это меня смутило :) – UmmaGumma

+0

Также стоит отметить, что вы поменяли порядок параметров в операторе >>, важный для оператора извлечения, что поток находится слева. Если вы на самом деле предназначались для этого оператора <<, то порядок параметров правильный, так как еще один ответ указал – lefticus

6

Более правильное объявление выходного оператора следующее:

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

не должен быть оператором >> – Ferruccio

+0

И вы можете объявить его как операцию друга в классе CLog. –

+1

Хорошо, но это не сработало – mathk

1

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

#include <fstream> 

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

void operator>>(const CLog& s, std::ofstream& dbg) 
{ 
    s.printOn(dbg); 
} 
Смежные вопросы