Ich versuche, eine Exception-Klasse zu entwickeln, die es ermöglicht, relevante Datenströme zu sammeln.Kann ich einen Stream werfen?
Nach Custom stream to method in C++? Ich habe meine eigene Klasse erweitert:
class NetworkException : public std::exception, public std::ostream
die Fehlerdaten aus einem Stream zu holen und dann wieder, was es durch .what()
erworben.
Dann habe ich versucht, so etwas wie diese:
try {
ssize_t ret = send(sock, headBuffer, headLength, MSG_MORE);
if (ret <= 0) throw NetworkException() << "Error sending the header: " << strerror(errno);
// much more communication code
} catch (NetworkException& e) {
connectionOK = false;
logger.Warn("Communication failed: %s",e.what());
}
Aber der Compiler erzeugt einen Fehler:
HTTPClient.cpp:246:113: error: use of deleted function 'std::basic_ostream<char>::basic_ostream(const std::basic_ostream<char>&)'
(das ist die Zeile mit den throw
.)
Ich weiß, strömt don‘ Ich habe Kopierkonstruktoren, aber ich dachte, es wäre ausreichend, statt des Objekts eine Referenz zu finden. Wie kann ich das überwinden - kann ich ein Objekt werfen, das einen Strom "verschluckt"?
Mögliches Duplikat von [C++: eine Ausnahme Werfen des Kopierkonstruktor aufruft] (http://stackoverflow.com/questions/10855506/c-throwing-an-exception-invokes-the-copy-constructor) –
@MohamadElghawi: Nun, dann wird das "Kann ich irgendwie einen Kopierkonstruktor für ein Stream-Objekt erstellen?" –