Я занимаюсь летней практикой и застрял на этом испытании. Целью было создать простую функцию setItem (). Если функция testSetItem () работала без исключения, то задача была пройдена.
Вот код. IKK, как вызвать исключение range_error, чтобы успокоить тестовую функцию.
Когда я отправляю это, грейдер говорит:
libc ++ abi.dylib: завершается с необработанным исключением типа std :: range_error: helpme
Моя попытка:
void Vec::setItem(unsigned index, const Item &it) {
if(index==0 || index > mySize)
throw std::range_error("helpme");
myArray[index] = it;
}
Код грейдера:
void VecTester::testSetItem() const {
cout << "Testing setItem()... " << flush;
// empty case
Vec v0;
try {
v0.setItem(0, 11);
cerr << "setItem() succeeded on empty Vec";
exit(1);
} catch (range_error&) { <--------HOW DO I APPEASE THIS???
cout << " 0 " << flush;
}
// nonempty case, valid subscript
Vec v(5);
for (unsigned i = 0; i < 5; i++) {
v.setItem(i, i+1);
}
for (unsigned i = 0; i < 5; i++) {
assert( v.myArray[i] == (i+1) );
}
cout << " 1 " << flush;
// nonempty case, invalid subscript
Vec v2(3);
try {
v2.setItem(3, 33);
cerr << "setItem() succeeded beyond end of Vec";
exit(1);
} catch (range_error&) {
cout << " 2 " << flush;
}
cout << "Passed!" << endl;
}