尝试迭代投掷地图时崩溃

时间:2015-02-19 04:57:32

标签: c++11

好的,当我尝试使用我的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;
}   


}

1 个答案:

答案 0 :(得分:0)

  

vStu [COUNT] .getGrades();你的意思是vStu [i] .getGrades();? VTC作为拼写错误。 - T.C.

错别字......让这对每个人都是一个教训,无论你多少次检查过你的代码,这都是你想念的最简单的事情。