0

我试图重载 ifstream 运算符 >> 以便从文本文件中读取数据并将数据放在属于 State 的类中。

我正在阅读的文件格式是州名 > 州首府 > 人口。我只想将状态名称读入数组。

我一直遇到运算符重载的问题。我有点理解它并且能够使 ostream 工作,但事实证明读入更加困难。

不知道这是否有所作为,但这是为了学校作业,我仍在努力。只是不知道从这里去哪里。

主文件

这是我的主要 CPP 文件。

#include <iostream>
#include <string>
#include <fstream>
#include "State.h"

using namespace std;

int main(){

    State s, h;

    string null;

    ifstream fin("states.txt");

    while(fin.good())
    {   
        fin >> h;       //This doesn't read anything in. 
        fin >> null;    //Dumping the Capital City to a null string
        fin >> null;    //Dumping the Population to a null string   
    }

    cout << s;          //Testing my overloaded << operator

    system("pause");

    return 0;

}

状态.cpp

这是一个辅助 CPP 文件。

#include "State.h"
#include <fstream>
#include <string>
#include <iostream>

    using namespace std;

int i = 0;
string name, x, y;

State::State()
{
    arrayStates[50];
}

//Trying to overload the input from fstream
ifstream& operator >> (ifstream& in, State h)
{
    for(i = 0; i < 21; i++)
    {
        in >> h.arrayStates[i];
    }
    return in;
}

ostream& operator << (ostream& out, State s)
{
    for(int i = 0; i < 21; i++)
    {
        out << s.arrayStates[i] << endl;
    }
    return out;
}

状态.h

这是包含我的类的头文件。

#include <iostream>
#include <string>

using namespace std;

class State{
private:
    string arrayStates[50];
public:
    State();
    friend ostream& operator << (ostream& out, State s);
    friend ifstream& operator >> (ifstream& in, State h);
};
4

1 回答 1

0

正如您所建议的,错误出在此函数中。

ifstream& operator >> (ifstream& in, State h)
{
    for(i = 0; i < 21; i++)
    {
        in >> h.arrayStates[i];
    }
    return in;
}

该函数制作your的临时副本State,调用 copyh并初始化该副本。

而是State通过引用传递原件。所以它的是同一个对象。

ifstream& operator >> (ifstream& in, const State &h)
于 2013-03-13T05:54:08.307 回答