Проблемы с чтением контента из двух файлов и записью в третий (с векторами) - PullRequest
0 голосов
/ 09 января 2020

В основном нужно прочитать информацию из двух файлов и записать в третий. Каждый файл имеет определенные 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++;
}

, но я просто не могу понять это. Я действительно читаю и пишу что-нибудь в моей новой лекции ()? Любая помощь будет принята с благодарностью. Извините за публикацию всего моего кода, просто хотел показать все функции, которые я использую. И да, я знаю, что есть гораздо более простой способ сделать это без этих классов, но это требование.

Сама ошибка в том, что в выходной текстовый файл ничего не записывается.

...