oop - errors when trying to pass an ofstream to an object (C++) -


i'm writing branch predictor simulator architecture class , i'm having trouble getting output working between multiple classes. i'm trying open 1 main ofstream in main.cpp , pass constructor of each class use objects. i'm getting whole bunch of errors in header file such as:

in file included main.cpp:4:0: predictors.h: in constructor â?~atpred::atpred(std::ofstream&)â?t: predictors.h:14:18: error: use of deleted function â?~std::basic_ofstream<char>& std::basic_ofstream<char>::operator=( const std::basic_ofstream<char>&)â?t 

so errors seem in header file:

#ifndef predictors_h #define predictors_h  #include <string>  // taken class atpred{     private:             std::ofstream outputfile;      public:             // constructor             atpred(std::ofstream& file)             { outputfile = file; }              // deconstructor             ~atpred()             {}              // member functions             void parseresults(std::string filename); };  // non-taken class antpred{     private:             std::ofstream outputfile;      public:             // constructor             antpred(std::ofstream& file)             { outputfile = file; }              // deconstructor             ~antpred()             {}              // member functions             void parseresults(std::string filename); };  #endif 

i'm not sure i'm going wrong here, appreciated.

the problem here you're storing ofstream value rather reference. can make code work changing antpred (and changing atpred) follows:

class antpred { private:     std::ofstream &outputfile; public:     antpred(std::ofstream &file) : outputfile(file) {         // other construction work     } }; 

while make code work, not safe. storing reference ofstream object implicitly assumes outlive atpred , antpred instances. if ostream destroyed first, behavior of atpred , antpred instances undefined , lead segfaults.

a non-exhaustive list of other options include using raw pointers (leads same lifetime issues pointed out above), shared pointers (either c++11 std::shared_ptr, boost::shared_ptr or other shared pointer library), constructing separate output stream each object, or passing output stream object instances when required log data.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -