在类构造函数c ++中使用istream

时间:2015-06-04 17:44:15

标签: 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

如果有人有任何想法,我会很感激。

2 个答案:

答案 0 :(得分:0)

Reading::read_student()中,您正在填写成员变量Reading::group。您没有填写group中的函数变量main

使用:

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

如果要填充函数变量groupReading需要存储对输入组的引用。

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

答案 1 :(得分:0)

我改变了什么:

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();
}

现在一切正常!!!