Я пытаюсь реализовать пример кода из учебника. Он пытается создать унаследованный класс Exception из исключения с кодом ниже.
#include <stdexcept>
#include <string>
using namespace std;
class TargetNotFoundException: public exception {
public :
TargetNotFoundException(const string& message = "")
: exception("Target not found: " + message.c_str()){ } // end constructor
}; // end TargetNotFoundException
Конструктор предоставляет способ для оператора throw, чтобы идентифицировать условие, вызвавшее исключение. Например, оператор
throw TargetNotFoundException (target + " not found in a box!");
вызывает конструктор TargetNotFoundException. Сообщение, переданное конструктору, возвращается методом, который унаследован от исключения класса. Таким образом, блок перехвата, такой как следующий, может получить доступ к сообщению:
catch(TargetNotFoundException except) {
cout << except.what() << endl;
}
Если цель имеет значение "glasses", когда этот блок выполняется, вывод будет Target not found: glasses not found in a box!
Однако существует ошибка компиляции, которая гласит:
error: invalid operands to binary expression ('const char [19]'
and 'const std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::value_type *'
(aka 'const char *'))
: exception("Target not found: " + message.c_str()){ } // end constructor
~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~