将文件中的数据复制到指针向量中

Copy data from file into vector of pointers

我试图在下面创建一个名为 load() 的函数,它将所有记录从我的 graduate.dat 文件复制到我的记录指针向量中,称为 primaryCollection。我创建了一个 Record class,其中包含构成每个 Record 的变量,并且在 load() 函数中 createReport.cc 我试图读取文件中的每一行,创建一个 Record object每行,然后将其添加到我的向量中。

问题是我一直收到错误:

createReport.cc: In static member function ‘static void createReport::load()’:
createReport.cc:25:71: error: expression list treated as compound expression in initializer [-fpermissive]
     Record* record(year, province, degree); //create Record object with this data
                                          ^
createReport.cc:25:71: error: invalid conversion from ‘int’ to ‘Record*’ [-fpermissive]

我不确定这是为什么,如果您能帮助我尝试读取文件,请将每条记录添加到我的 collection。

我的graduate.dat文件格式如下,格式为<年省学位>

2000 AB Bachelor's 
2005 AB Bachelor's 
2005 MB College 

primaryCollection 必须是记录指针的向量,我也不允许在此任务中使用 std::map

Record.h

#ifndef RECORD_H
#define RECORD_H

    #include <iostream>
    #include <string>

    class Record{
      public:
            Record(int = 0, string = "", string = "");
            ~Record();
        
        private:
            int year;
            string province;
            string degree;
    };
    #endif

Record.cc

#include <iostream>
#include <string>
using namespace std;
#include "Record.h"

Record::Record(int i1, string s1, string s2) : year(i1), province(s1), degree(s2){}

Record::~Record(){}

createReport.h

#ifndef CREATEREPORT_H
#define CREATEREPORT_H

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstdlib>

#include "Record.h"

class createReport{
  public:
    createReport();
    static void load();
  
  protected:
    static vector<Record*> primaryCollection; //STL vector of record pointers
  
};
#endif

createReport.cc

#include <iostream>
using namespace std;
#include <string>

#include "createReport.h"

void createReport::load(){
    int year;
    string province, degree;

    ostream_iterator<Record*> outItr(cout);

    ifstream infile("graduate.dat", ios::in); 

    if (!infile) {
        cout << "Error: could not open file" << endl;
        exit(1);
    }

    while (infile >> year >> province >> degree) { //as long as were not at end of file
        Record* record(year, province, degree); //create Record object with this data
        primaryCollection.push_back(record); 
    }
  
    cout<<endl<<"List of Records:"<<endl;
    copy(primaryCollection.begin(), primaryCollection.end(), outItr); //print records
}

这里正确的语法是:

Record* record = new Record(year, province, degree);

之后的一切都很好,但请记住 vector 现在“拥有”指针,您有责任以某种方式释放这些分配。这就是 pointer wrappers 派上用场的地方。