2011-01-17 14 views
1

Ich benutze fstream und habe einen Fehler bekommen.C++ Kompilierfehler mit Iostream

Hier ist, was ich habe:

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

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

Aber wenn ich kompilieren Ich habe folgende Fehlermeldung:

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 

Ich dachte, dass ofstream von Ostream erben also warum es nicht möglich ist?

Dank

+0

Arggg! fand eine fehlende '#include '. Was für eine blöde Ausgabe vom Compiler. Danke alle – mathk

Antwort

2

PRINTON öffentlich machen und umfasst 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); 
} 
+0

printOn war öffentliches fstream fehlte danke :). Aber warum ist der Compiler in dieser Situation so nutzlos? – mathk

+0

Ja, es verwirrte mich zu :) – UmmaGumma

+0

Beachten Sie auch, dass Sie die Reihenfolge der Parameter in Operator >> vertauscht, wichtig für den Extraktionsoperator, dass der Stream auf der linken Seite sein. Wenn Sie tatsächlich dazu gedacht sind, ein Operator << zu sein, dann ist die Reihenfolge der Parameter richtig, wie eine andere Antwort darauf hingewiesen – lefticus

6

Weitere korrekte Deklaration des Ausgabeoperators folgt:

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

sollte das nicht sein Operator >> – Ferruccio

+0

Und Sie können es als Freund Operation in CLog Klasse erklären. –

+1

Ok aber das hat nicht funktioniert – mathk

1

Ich würde vorschlagen, vollständigen Entsendung Code ermöglicht, das Problem zu reproduzieren. Ich habe keine mit:

#include <fstream> 

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

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