为什么我的代码无法从文件中读取,可能是什么错误? -动态数组列表

问题描述

所以我正在创建一个动态数组列表类指针。但是我的构造函数没有从文件中读取任何内容。它没有显示任何错误,我能够运行它。因此,我不确定是否缺少链接指针的内容

实施代码

#include "S.h"

void S::setSize(int size1)
{
    size=size1;
}

S::S (ifstream& fin)
{
    int s;
    fin>>s;
    size=s;

    S *ptr = new S[s];

    string fname;
    string lname;
    string address;
    for(int i = 0; i<s; i++)
    {
        fin>>fname>>lname;
        getline(fin,address);

        ptr[i].setName(fname); //changed to i
        ptr[i].setLname(lname);
        ptr[i].setAddress(address);

        //s++;
    }
    //cout<<list[0].firstname;


list = ptr;

}
void S::print(ofstream& fout)
{
    for(int i=0; i<size; i++)
    {
        fout<<list[i].getName()<<"   "<<list[i].getLname()<<"   "<<list[i].getAddress()<<endl;
    }
}

驱动程序代码

#include "S.h"

int main()
{
    ifstream fin;
    ofstream fout;

    
}

这是我的班级代码。在我的函数实现中,我也实现了设置器。例如:void S :: setName(字符串name1){list-> firstname = name1;}

class S\
{
private:
    int size;
    string firstname;
    string lastname;
    string address;

    S* list;

public:

    S ();
    S (ifstream& fin);

void setName(string);
    void setSize(int);
    void setLname(string);
    void setAddress(string);

    string getName(){return firstname;}
    string getLname(){return lastname;}
    string getAddress(){return address;}


    int getSize(){return size;}


    void print(ofstream&);


};

解决方法

您应该更改周期。您始终将“ s”用作索引。

for(int i = 0; i<s; i++)
{
    fin>>fname>>lname;
    getline(fin,address);

    ptr[i].setName(fname);
    ptr[i].setLname(lname);
    ptr[i].setAddress(address);

    // ptr[s].setName(fname);
    // ptr[s].setLname(lname);
    // ptr[s].setAddress(address);
}