0

我有 2 个单独的代码文件。一个是主文件,一个是包含函数的文件。

代码可以在下面查看:

学生.cpp

Student::Student(const string &name, int regNo) : Person(name)
{
    map<string, float> marks;
    this->name = name;
    this->regNo = regNo;
}

int Student::getRegNo() const
{
    return regNo;
}

void Student::addMark(const string& module, float mark)
{
    map<string, float>::const_iterator it;
    marks.insert(make_pair(module, mark));

    for (it = marks.begin(); it != marks.end(); it++)
    {
        if(it->second !=0){
            marks[module] = mark;
        }
    }


}

主文件

Student stud(name, i);//this is what I want to do

    if(wordfile.is_open() && file2.is_open())
    {
        if(!wordfile.good() || !file2.good())
        {
            cout << "Error reading from file. " << endl;
        }



        while(wordfile.good())
        {
            getline(wordfile, s1);
            istringstream line(s1);
            line >> i;
            line >> name;

            Student stud(name, i);
            cout << stud.getRegNo() << endl;
            itR.push_back(stud.getRegNo());
            vS.push_back(stud);
        }
        wordfile.close();



        while(file2.good())
        {
            getline(file2, s2);
            istringstream line(s2);
            line >> reg;
            line >> mod;
            line >> mark;
                    stud.getRegNo();
        }
        file2.close();
    }
}

我理想中想要做的是使用我的构造函数student.cpp来创建一个student对象。然后,我希望能够在 main 中的任何位置调用 student.cpp 中的函数。但是,我需要提供给构造函数的值来自我的代码中名为“wordfile”的文件。因此Student stud(name, i);在寻找“wordfile”的同时被调用。但是,然后我希望在 while 循环中为“file2”调用“stud.getRegNo()”,但这当然是不允许的。由于 stud 被用作局部变量,因此它的范围没有那么远。

所以我的问题是,无论如何我可以执行我想做的事情吗?也许通过初始化然后Student stud调用?或类似的规定?stud(name, i)stud.getRegNo()

4

2 回答 2

2

您可以使用在堆上分配 Studentnew并将实例保持在两个上下文都可访问的范围级别。

Student* s;

{ //Context 1
    s = new Student();
}

{ //Context 2
    int regNo = s->getRegNo();
}
于 2013-01-10T19:56:43.590 回答
0

除了使用向量 (?),您可能需要的是 std::map 以便您知道要选择哪个学生。

    std::map<int, Student*> students;
    while(wordfile.good())
    {
        getline(wordfile, s1);
        istringstream line(s1);
        line >> i;
        line >> name;

        students[i] = new Student(name, i);
    }
    wordfile.close();



    while(file2.good())
    {
        getline(file2, s2);
        istringstream line(s2);
        line >> reg;
        line >> mod;
        line >> mark;

        students[reg]->addMark(mod, mark);
    }
    file2.close();

    ....
于 2013-01-10T21:30:17.843 回答