В основном нужно прочитать информацию из двух файлов и записать в третий. Каждый файл имеет определенные c типы информации, которую я должен охватывать в классах. Вот мой код:
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
class Course {
public:
string get_name() const {
return name;
}
int get_students() const {
return students;
}
virtual void read(ifstream& infile) {
infile >> name >> students;
}
protected:
string name;
int students;
};
class Lecture : public Course {
public:
int get_num() {
return num;
}
virtual void read(ifstream& infile) {
Course:: read (infile);
infile >> num;
}
void write(ostream& outfile) {
outfile << get_name() << " " << get_students() << num << "n";
}
private:
int num;
};
class Lab : public Course {
public:
int get_numberofpc(){
return numberofpc;
}
void read(ifstream& infile) {
Course::read(infile);
infile >> numberofpc;
}
void write(ostream& outfile) {
outfile << get_name() << " " << get_students() << numberofpc << "n";
}
private:
int numberofpc;
};
bool check(string a, string b) {
return a < b;
}
int main()
{
vector <Lecture* > lec;
vector <Lab* > lab;
int lec_count = 0;
int lab_count = 0;
string lecCourse;
cout << "First file: " << "\n";
cin >> lecCourse;
ifstream inf;
inf.open(lecCourse.c_str());
if (inf.fail()) {
cout << "No such file - First file" << "\n";
return 1;
}
else {
int temp;
inf >> temp;
for(int i = 0;i<temp;i++)
{
lec[lec_count] = new Lecture();
lec[lec_count]->read(inf);
lec.push_back(new Lecture());
lec_count++;
}
inf.close();
}
for (int i = 0; i < lab_count; i++)
{
lab[i]->write(cout);
}
for (int i = 0; i < lec_count; i++) {
lec[i]->write(cout);
}
string lab_ex;
cout << "Second file: " << "\n";
cin >> lab_ex;
ifstream inn;
inn.open(lab_ex.c_str());
if (inn.fail()) {
cout << "No such file - Second file" << "\n";
return 1;
}
else {
int temp;
inn >> temp;
for (int i = 0; i < temp; i++){
lab[lab_count] = new Lab();
lab[lab_count]->read(inn);
lab.push_back(new Lab());
lab_count++;
}
inn.close();
}
string exit;
cout << "Exit file: " <<"n";
cin >> exit;
ofstream output;
output.open(exit.c_str());
if (output.fail()) {
cout << "No such file - Third file" << "\n";
return 1;
}
for (int i = 0; i < lec_count; i++)
{
lec[i]->write(output);
}
for (int i = 0; i < lab_count; i++)
{
lab[i]->write(output);
}
output.close();
}
Я на 99% уверен, что моя ошибка где-то здесь:
for(int i = 0;i<temp;i++)
{
lec[lec_count] = new Lecture();
lec[lec_count]->read(inf);
lec.push_back(new Lecture());
lec_count++;
}
, но я просто не могу понять это. Я действительно читаю и пишу что-нибудь в моей новой лекции ()? Любая помощь будет принята с благодарностью. Извините за публикацию всего моего кода, просто хотел показать все функции, которые я использую. И да, я знаю, что есть гораздо более простой способ сделать это без этих классов, но это требование.
Сама ошибка в том, что в выходной текстовый файл ничего не записывается.