Unklarer Fehler mit Datei
-
Ich habe folgendes geschrieben:
Header (Auszug)#include <fstream> #include <time.h> class DataProcessor { public: time_t now; StatisticsObject** sos; int pav[AutolartVector::frame]; FactorialData factorialData; std::ofstream alarmfile; DataProcessor( RandomNumberGenerator &rng, std::string names[Constants::numberOfStatisticObjects] ); DataProcessor( RandomNumberGenerator &rng );In der Quelldatei steht
using namespace std; DataProcessor::DataProcessor( RandomNumberGenerator &rng, std::string names[Constants::numberOfStatisticObjects] ) : factorialData(), alarmfile() { /*...hier steht was...*/ } DataProcessor::DataProcessor( RandomNumberGenerator &rng ) : factorialData(), alarmfile() { /*...hier steht was...*/ }Beim Kompilieren erhalte ich folgenden Fehler:
make
g++ -g -Wall -c StatisticsObject.cpp -o StatisticsObject.o
g++ -g -Wall -c DataProcessor.cpp -o DataProcessor.o
/usr/include/c++/4.0.0/iosfwd: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/include/c++/4.0.0/bits/ios_base.h:779: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/include/c++/4.0.0/iosfwd:55: error: within this context
/usr/include/c++/4.0.0/iosfwd: In copy constructor ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)’:
/usr/include/c++/4.0.0/iosfwd:92: warning: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here
/usr/include/c++/4.0.0/iosfwd: In copy constructor ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’:
/usr/include/c++/4.0.0/streambuf:772: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
/usr/include/c++/4.0.0/iosfwd:86: error: within this context
/usr/include/c++/4.0.0/iosfwd: In copy constructor ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)’:
/usr/include/c++/4.0.0/iosfwd:92: warning: synthesized method ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’ first required here
DataProcessor.cpp: In member function ‘void DataProcessor::classify(AutolartVector, time_t)’:
DataProcessor.cpp:133: warning: synthesized method ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)’ first required here
DataProcessor.cpp:133: warning: initializing argument 3 of ‘void StatisticsObject::checkIfObservationIsOdd(long int, double*, std::ofstream)’
make: *** [DataProcessor.o] Error 1Den Fehler verstehe ich nicht.
-
Zu allererst: Wenn du Objekte default-initialisiert haben willst brauchst du das nicht extra in der Initialisierungsliste zu tun.
Dein Fehler kommt nicht aus dem geposteten Code. Ich nehme an, du versuchst irgendwo ein DataProcessor-Objekt zu kopieren. Dabei werden die Member kopiert, was bei Streams schiefgeht; die haben üblicherweise Kopierkonstruktor und op= private gesetzt (und nicht definiert), um ein Kopieren zu verbieten.
-
am Ende sagt er doch: DataProcessor.cpp:133: warning: initializing argument 3 of ‘void StatisticsObject::checkIfObservationIsOdd(long int, double*, std::ofstream)’
Das heißt in Zeile 133 hast du eine Funktion deklariert, die als drittes Argument einen std::ofstream per Kopie nimmt - und die ganzen Meldungen davor kommen daher, dass std::ofstream im Endeffekt nicht kopiert werden kann - der Compiler bekommt Probleme bei der Instantiierung des Copy-Ctors
-
Stimmt! Ich konnte den Fehler beheben. Viele Dank.