簡體   English   中英

istream在類構造函數c ++中的用法

[英]usage of istream in class constructor c++

我有一個文本文件,其中包含學生及其成績的列表,如下所示:

Name_of_student 78 4; 98 5; 90 5; 63 3;
...

我的任務是創建一個將讀取和存儲該數據的類。 到目前為止,這是我所做的。

group.h
class Subject {
public:
    Subject(int mark0, int mark1);
    Subject();
    int get_m0() { return mark0; }
    int get_m1() { return mark1; }
private:
    int mark0;
    int mark1;
};

class Student {
public:
    Student(string name);
    Student();
    vector<Subject>my_marks;
    string get_name() { return name; }
private:
    string name;
};

class Reading
{
public:
    Reading(vector<Student>, istream& );
    istream& read_student();
private:
    vector<Student>group;
    istream& is;
};

text.cpp
Subject::Subject(int m0, int m1) :
mark0(m0), mark1(m1) {}

Subject::Subject() :
mark0(1), mark1(1) {}

Student::Student(string n0) :
name(n0) {}

Student::Student() :
name("null") {}

Reading::Reading(vector<Student>group0, istream& is0) :
group(group0), is(is0) {}

istream& Reading::read_student()
{
    string n;
    is >> n;
    if (!is) return is;
    Student st = Student(n);
    for (int i = 0; i < 4; ++i)
    {
        int m0, m1;
        is >> m0 >> m1;
        char ch;
        is >> ch;
        Subject sub = Subject(m0, m1);
        st.my_marks.push_back(sub);
    }
    group.push_back(st);
    return is;
}

它可以編譯,但拒絕讀取任何內容。

int main()
{
   ifstream ifs("text");
   if(!ifs) error("can`t open input file");
   vector<Student> group;
   Readding r(group, ifs);
   r.read_student();
   cout << group.size();
}

它顯示了什么:

0

如果有人有任何想法,我將不勝感激。

Reading::read_student() ,您將填充成員變量Reading::group 您沒有在main填充功能變量group

采用:

int main()
{
   ifstream ifs("text");
   vector<Student> group;
   Readding r(group, ifs);
   r.read_student();
   cout << r.group.size();
   //     ^^^^^^^^ access the member variable of r.
}

如果要填充功能變量group ,則Reading需要存儲對輸入組的引用。

class Reading
{
public:
    Reading(vector<Student> & , istream& );
    //          ^^^^^^ Take a reference as input
    istream& read_student();
private:
    vector<Student>& group;
    //          ^^^^^^ store a reference
    istream& is;
};

我改變了什么:

group.h
class Reading
{
public:
    Reading( istream& );
    vector<Student>group;
    istream& read_student();
private:
    istream& is;
};

text.cpp
    Reading::Reading(istream& is0) :
    is(is0) {}

int main()
{
   ifstream ifs("text");
   if(!ifs) error("can`t open input file");
   Readding r(ifs);
   r.read_student();
   cout << r.group.size();
}

現在一切正常!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM