Что вы могли бы сделать, так это создать исключение, чтобы указать на проблему, которая возникает во время выполнения вашей программы. В стандартной библиотеке есть несколько классов исключений , которые вы можете использовать для создания исключения, все из которых являются производными от std:exception
. Например, std::out_of_range
.
Чтобы создать стандартное исключение, вы создаете строку, описывающую исключение, и используете ее для инициализации объекта исключения:
std::string s("my exception")
...
throw std::out_of_range(s);
Вы также можете написать:
throw std::out_of_range("out of from somewhere");
с использованием неявного преобразования из char*
в std::string
.
Другая возможность - определить свой собственный специальный класс исключения, производный прямо или косвенно от
std::exception
. Однако вы должны предоставить переопределенную виртуальную функцию
what()
в своем классе:
class MyException: public std::exception
{
public:
MyException(...){
}
virtual const char* what() const throw() {
return "C++ Exception";
}
};
Другой способ предоставить функцию what()
- получить класс исключения из одного из классов, которые имеют строку конструктор для аргумента what()
:
class MyException: public std::out_of_range
{
public:
MyException(const std::string &what): std::out_of_range(what) {}
};
Таким образом, вы можете использовать разные классы для разных типов исключений.
Теперь вы можете выбросить исключение в
Stitcher::calibrate()
, но для его перехвата нужен блок try ... catch. Примерно так:
try
{
Stitcher stitcher;
// this will be executed if no exception is thrown
}
catch (const std::exception &e)
{
std::cout << e.what();
}