好的,当我尝试使用我的getGrades方法时,我遇到了崩溃。以下是我遇到问题的主要部分。
class Student {
public:
void setId(string);
void setName(string, string);
void setGrades(string, int);
string getId();
string getName();
void getGrades();
private:
string id_;
Name name_;
Grades grades_;
};
void Student::setGrades(string course, int score) {
grades_.insert(make_pair(course, score));
}
void Student::getGrades() {
for(auto it = grades_.begin(); it != grades_.end(); ++it) {
cout << it -> first << ' ' << it -> second << endl;
}
}
如果我将getGrades中的代码放入setGrades方法中,它可以正常工作,但是在它自己的方法中它会崩溃:
0 [main] a 5144 cygwin_exception::open_stackdumpfile: Dumping stack trace
to a.exe.stackdump
即使我拿出其他正常工作的方法并且刚刚离开(我认为)关键元素,我希望你能指出我正确的方向。
编辑:我忘了添加..
typedef pair<std::string, string> Name; // first name, last name
typedef map<std::string, int> Grades; // map courses to scores
编辑2:按要求..
vector<Student> addStudent(int count, int x, vector<Student>& vStu, string file) {
string line, first, last;
ifstream infile(file);
while (getline(infile, line)) {
vStu.push_back(Student());
vStu[count].setId(line);
getline(infile, line);
istringstream iss(line);
if (!(iss >> first >> last)) {
cout << "failed to get name" << endl;
break;
}
vStu[count].setName(first, last);
getline(infile, line);
istringstream iss2(line);
if (!(iss2 >> x)) {
cout << "failed to get class number" << endl;
break;
}
for (int i = 0; i < x; i++) {
string sClass;
int grade;
getline(infile, line);
istringstream iss3(line);
if (!(iss3 >> sClass >> grade)) {
cout << "failed to get class and grade" << endl;
break;
}
vStu[count].setGrades(sClass, grade);
}
count++;
}
return vStu;
}
int main(int argc, char *argv[]) {
vector<Student> vStu;
int count = 0, x = 0;
if (argc != 2) {
cout << "Incorrectly called" << endl;
cout << " " << argv[0] << ' ' << "<filename>" << endl;
return 1;
}
addStudent(count, x, vStu, argv[1]);
count = vStu.size();
for (int i = 0; i<count;i++) {
cout << vStu[i].getId() << endl;
cout << vStu[i].getName() << endl;
vStu[count].getGrades();
cout << endl;
}
}
答案 0 :(得分:0)
vStu [COUNT] .getGrades();你的意思是vStu [i] .getGrades();? VTC作为拼写错误。 - T.C.
错别字......让这对每个人都是一个教训,无论你多少次检查过你的代码,这都是你想念的最简单的事情。