2012-04-09 3 views
1

Ich versuche, den Inhalt einer Karte in eine andere einzufügen. Hier ist der Code:Warum erhalte ich beim Einfügen in eine Karte einen Seg-Fehler?

std::map<std::string, int> Student::getGrades() const; 
... 

for(set<Student*, Cmp>::const_iterator it = s.begin(); it!=s.end(); ++it) 
{ 
    grades.clear(); 
    grades.insert((*it)->getGrades().begin(), (*it)->getGrades().end()); 
    for(map<string, int>::const_iterator itt = grades.begin(); itt!=grades.end(); ++itt) 
    { 
     if(itt->first == course && itt->second >= score1 && itt->second <= score2) 
      (*it)->display(cout); 
    } 
} 

s ist ein Satz, die Zeiger auf Schüler Objekte und jeder Student Objekte enthält, hat eine getGrades() -Methode, die eine Karte zurückgibt. Ich versuche, Noten zu finden, die mit den Noten übereinstimmen, die ich aus einer Datei eingelesen habe, und den entsprechenden Datensatz auszudrucken. Die Einfügemethode gibt mir jedoch einen Seg-Fehler. Irgendwelche Vorschläge?

+2

Können Sie die Deklaration von 'Student :: getGrades()' anzeigen? – alexisdm

Antwort

3

Wenn getGrades() eine Kopie der Neigungskarte und keine Referenz zurückgibt, gehören begin() und end() zu 2 verschiedenen Karten.

Sie sollten wahrscheinlich eine lokale Kopie machen und den Code wie folgt vereinfachen:

for(set<Student*, Cmp>::const_iterator it = s.begin(); it!=s.end(); ++it) 
{ 
    map<string, int> grades = (*it)->getGrades(); 
    for(map<string, int>::const_iterator itt = grades.begin(); itt!=grades.end(); ++itt) 
    { 
     if(itt->first == course && itt->second >= score1 && itt->second <= score2) 
      (*it)->display(cout); 
    } 
} 
+0

Das hat es behoben! Vielen Dank! – Strata

0

Es könnte s eine nicht initialisierte Zeiger in der Menge.

Verwandte Themen