Fehler C2248: 'std :: basic_ios_Elem, _Traits :: basic_ios': kann nicht auf private Member zugreifen, die in der Klasse 'std :: basic_ios_Elem, _Traits' deklariert sind

8

Erhalte diesen Fehler und ich bin mir ziemlich sicher, dass es im Operator & lt; & lt; Funktion. Beide Drucke sind öffentlich.

%Vor%     
andrey 28.02.2011, 03:01
quelle

3 Antworten

12

Sie müssen die ostream durch Verweis, nicht Wert zurückgeben. Es versucht, einen Konstruktor aufzurufen. Könnte auch 'a' als Referenz übergeben:

%Vor%

Ich bemerke auch, dass die Druckmethode wahrscheinlich falsch ist. Es hat sout als Name des Streams übergeben, wird dann aber direkt mit cout implementiert. Es sollte

sein %Vor%     
Keith 28.02.2011 03:07
quelle
5
%Vor%

Streams können nicht kopiert werden. Sie können also keinen Wert zurückgeben. Sie müssen den Stream als Referenz zurückgeben ( std::ostream& ).

Sie sollten wahrscheinlich auch in sout in Ihrer CRational::print(ostream&) -Funktion ausgeben (sonst, warum sollten Sie es als Argument nehmen?) und Sie sollten sout wahrscheinlich weitergeben, wenn Sie a.print() in Ihrem% co_de aufrufen % overload (sonst macht die Überladung nicht wirklich das, was eine idiomatische operator<< Überladung für einen Stream tun soll).

    
James McNellis 28.02.2011 03:05
quelle
2

operator<< sollte einen Verweis auf ein ostream : ostream& operator<< ...

zurückgeben

Auch deine Funktionen sind irgendwie durcheinander. Anstatt cout zu verwenden, sollten Sie das übergebene ostream verwenden, das Sie sout genannt haben.

    
user470379 28.02.2011 03:06
quelle

Tags und Links