上級 › terminate called after throwing an instance of '...' の原因と直し方 › パターン2
terminate called after throwing an instance of '...' の原因と直し方
throwで投げた例外をどこのtry-catchでも捕まえられず、プログラム全体が異常終了してしまうバグです。
1 #include <iostream> 2 #include <stdexcept> 3 void setAge(int age) { 4 if (age < 0) { 5 throw std::invalid_argument("age must not be negative"); 6 } 7 std::cout << "age set" << std::endl; 8 } 9 int main() { 10 setAge(__); ^ 11 return 0; 12 }
terminate called after throwing an instance of 'std::invalid_argument'
what(): age must not be negative
Aborted
空欄を埋めてコンパイル・実行を通す
「例外はthrowしておけば自動的にどこかで処理される」というのは誤解です。呼び出し元をさかのぼって対応するcatchが見つからなければ、mainまで届いてterminateされます。
次の問題