2016-04-05 5 views
0

Ich wurde gebeten, try-catch-Ausnahmebehandlung zu verwenden, um den Fall zu behandeln, wenn die Liste der Schüler leer ist. Ich bin neu in der Ausnahmebehandlung kann mich jemand führen? Unten ist die Implementierung der Durchschnittsmethode. Ich muss try-catch verwenden, um sicherzustellen, dass die Liste nicht leer ist.try-catch-Ausnahme in C++

double classAverage() 
{ 
    int count = 0; 
    double sum = 0.0; 
    Container *temp = list; 


if (temp == NULL) 
{ 

    cout << "List empty!"; 
    return -1.0; 
} 

    while (temp != NULL) 
    { 

     sum += temp->student->getGrade(); 
     temp = temp->next; 
     count++; 
    } 
    return sum/count; 

}

+0

Es ist nicht eine große Auswahl in wieder heraus ein " schlechtes "Design, weil Sie nicht etwas arbeiten können. Machen Sie den" richtigen "Weg arbeiten. IOW, machen Sie nicht den Schüler * öffentlich * und ausgesetzt, damit die Funktion funktioniert. – ChiefTwoPencils

+0

Übergeben Sie einen gültigen 'Student *' an 'changeGrade'? – Tas

+0

Sie zeigen eine Kopie dieses Zeigers an anderer Stelle, sie ändern das Original nicht. Ich versuche herauszufinden, was nicht funktioniert, da das OP nicht explizit ist. – Tas

Antwort

0

Seit changeGrade ein Freund von Student ist, sollte diese Arbeit:

void changeGrade(Student* s, int newGrade) { 
    s->grade = newGrade; 
} 

Gerade jetzt Sie den Zeiger s auf ein neues Objekt Student repoint. Was Sie wollen ist das Objekt, das an die Funktion übergeben wurde.

0

Es gibt nicht genug Informationen, aber ich denke, den Code wie folgt aussehen könnte:

Student* student = new Student("John", "Doe", 99, 1); 
changeGrade(student, 9); 

Dies wird nicht den Schüler überhaupt nicht ändern, da Sie den Zeiger nach Wert übergeben, so dass, wenn Sie neu zuweisen Es wird das ursprüngliche Objekt (der Zeiger student) nicht geändert. Für die anrufende Code, um eine Änderung zu bemerken, müssen Sie durch Verweis übergeben (Student*& - empfohlene Methode) oder einen Zeiger auf einen Zeiger (Student**); Sie sich auch nicht vergessen, den ursprünglichen Zeiger (Student*), wenn Sie zu löschen. Speicherleck sind die Student** Ansatz verwenden, oder Sie.


Sie sollten nicht einen Weg, um nicht die int Einstellung machen, ist es wahrscheinlich eine schlechte Praxis und verwirrend.