0

こんにちは私は2つの空白で区切られた3つのintのリストを持っています、そして私はそれらを読んでオブジェクトを作成したいと思います。データ構造、クラス、および前後のデータからコードを貼り付けます。エラーの理由がわかりません。どんな助けでも大歓迎です:

Class.h:

class RAngle{
private:
    int x,y,l,b; 
    int solution,prec;
    RAngle(){
        x = y = solution = prec = b = l = 0;
    }

    RAngle(int i,int j,int k){
        x = i;
        y = j;
        l = k;
        solution = 0; prec=0; b=0;
    }

    friend ostream& operator << (ostream& out, const RAngle& ra){
        out << ra.x << " " << ra.y<<" " << ra.l <<endl;
        return out;
    }

    friend istream& operator >>( istream& is, RAngle& ra){
        is >> ra.x;
        is >> ra.y;
        is >> ra.l;

        return is ;
    }

};

dataStructure.h:

template <class T>
class List
{
private:
    struct Elem
    {
        T data;
        Elem* next;
    };

    Elem* first;

    void push_back(T data){
    Elem *n = new Elem;
    n->data = data;
    n->next = NULL;
    if (first == NULL)
    {
        first = n;
        return ;
    }
    Elem *current;
    for(current=first;current->next != NULL;current=current->next);
    current->next = n;
}

main.cpp:

void readData(List <RAngle> &l){
    *RAngle r;
    int N;
    ifstream f_in;
    ofstream f_out;

    f_in.open("ex.in",ios::in);
    f_out.open("ex.out",ios::out);

    f_in >> N;
    for(int i=0;i<13;++i){
        f_in >> r;
        cout << r;
        l.push_back(r);
    }

    f_in.close();
    f_out.close();
}*

入力データ:

3 1 2
1 1 3
3 1 1

出力(読み取り時の印刷時):

1 2 1
1 3 3
1 1 3

ご覧のとおり、2番目の位置から読み取りを開始し、1番目の位置で終了します。

4

2 に答える 2

1

読み取る行f_in >> Nは最初にカウントを変数に読み取っていますが、入力ファイルにはそのカウントがありません。(または、最初の '3' をカウントとして認識します。これは、タプルが実際には '1 2 1 ...' で始まることを意味します)。

于 2012-06-04T20:08:08.350 に答える
1

ご覧のとおり、2 番目の位置から読み取りを開始し、1 番目の位置で終了します。

これは、最初の値を抽出するためです。

関数readData内:

f_in >> N;    //  This line will extract the first value from the stream.

// the loop starts at the second value
for(int i=0;i<13;++i){
f_in >> r;
    cout << r;
    l.push_back(r);
}
于 2012-06-04T20:08:31.253 に答える