2016-04-05 2 views
0

Мне было предложено использовать обработку исключений try-catch для обработки дела, если список студентов пуст. Я новичок в обработке исключений, кто-нибудь может мне помочь? Ниже приведена реализация среднего метода. Мне нужно использовать try-catch, чтобы убедиться, что список не пуст.исключение try-catch в 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

Это не большой выбор, чтобы отступить в " плохой "дизайн, потому что вы не можете заставить что-то работать. Сделайте« правильный »способ работы. IOW, не делайте оценку ученика * общедоступной * и не подвергайте, чтобы функция работала правильно. – ChiefTwoPencils

+0

Вы передаете действительный 'Student *' to' changeGrade'? – Tas

+0

Они указывают копию этого указателя в другом месте, они не изменяют оригинал. Я пытаюсь выяснить, что не работает, поскольку OP не является явным. – Tas

ответ

0

С changeGrade является другим Student, это должно работать:

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

Прямо сейчас вы Repoint указателя s на новый Student объекта. То, что вы хотите , - это изменить объект, который был передан функции.

0

Существует не хватает информации, но я думаю, что ваш код может выглядеть следующим образом:

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

Это не изменит студента на всех, потому что вы передаете указатель на значение, поэтому, когда вы переназначить он, исходный объект (указатель student) не изменяется. Для вызывающего кода, чтобы заметить изменения, вы должны пройти мимо ссылки (Student*& - рекомендуемый способ) или с помощью указателя на указатель (Student**); Кроме того, не забудьте удалить исходный указатель (Student*), если вы. используем Student** подход, или вы утечка памяти.


вы не должны делать обходной путь не устанавливая int, его, вероятно, плохая практика и запутанной.

Смежные вопросы