0

テキストファイルから読み取り、Stateに属するクラスにデータを配置するために、ifstream演算子>>をオーバーロードしようとしています。

私が読んでいるファイルの形式は、[州名]>[州都]>[人口]です。状態の名前を配列に読み込みたいだけです。

演算子のオーバーロードに問題があります。私はそれをある程度理解し、ostreamを機能させることができましたが、読み取りはより困難であることが証明されています。

それが違いを生むかどうかはわかりませんが、これは学校の課題のためであり、私はまだそれに取り組んでいます。ここからどこへ行くのかわからない。

main.cpp

これは私のメインの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;

}

State.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;
}

State.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;
}

この関数は、の一時的なコピーを作成し、Stateそのコピーを呼び出して、そのコピーhを初期化します。

代わりに、参照Stateによってオリジナルを渡します。したがって、同じオブジェクトを参照します。

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