我正在构建一个简单的程序来“边走边学”,该程序需要几个文本文件并对其进行处理,第一个文本文件的每一行都是关于一个人的信息,并且每一行都有一个对象(学生类型(见下文))被创建并添加到向量中。在 Student 对象中是一个存储学生标记的地图。我在学生类中有一个函数,它在调用时返回地图(或者至少这就是我想要做的)。目前这个功能是:
marksType Student::printMarks(){
return marks;
}
(其中marksType = std::map<string, float>
)和marks
是类型的地图marksType
。
然后在我的主要功能中,我有:
Student a = *qw;
studmarks = a.printMarks();
for (std::map<string, float>::iterator iter = studmarks.begin(); iter != studmarks.end(); iter++){
cout << "TEST" << endl;
}
其中 qw 是指向学生对象的指针,而 studmarks 是类型map<string, float>
问题是 cout 没有被调用,所以迭代器似乎跳过(但学生对象确实在标记映射中有项目)。
这是完整的学生课程
#include "Student.h"
using namespace std;
typedef std::map<string, float> marksType;
Student::Student(const string &name, int regNo) : Person(name){
marksType marks;
this->regNo = regNo;
}
int Student::getRegNo() const{
return regNo;
}
void Student::addMark(const string& module, float mark){
pair<marksType::iterator,bool> check;
check = marks.insert (pair<string,float>(module,mark));
if (check.second==false){
marks[module]=mark;
}
}
float Student::getMark(const string &module) const throw (NoMarkException){
if (marks.find(module) != marks.end()){
return marks.find(module)->second;
}
else throw NoMarkException();
}
float Student::getAverageMark() const throw (NoMarkException){
if (!marks.empty()){
float avgmark = 0;
for (marksType::const_iterator avgit=marks.begin(); avgit!=marks.end(); ++avgit){
avgmark = avgmark + avgit->second;
}
avgmark = avgmark/marks.size();
return avgmark;
}
else throw NoMarkException();
}
marksType Student::printMarks(){
return marks;
}
哦,下面是给学生加分的主要功能部分,
for (vector<Student>::iterator it = students.begin(); it != students.end(); ++it){
Student b = *it;
if (regno == b.getRegNo()){
found = true;
b.addMark(module, mark);
}
}
我知道这很有效,因为当我使用 getMark 函数时它确实有效。