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 1

    Den 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.


Anmelden zum Antworten