Задача класса исключений, определенного программистом - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь реализовать пример кода из учебника. Он пытается создать унаследованный класс 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
                        ~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~

1 Ответ

0 голосов
/ 09 апреля 2020

Нет оператора +, который принимает две строки C в качестве параметров. Просто удалите .c_str() из своего кода

exception("Target not found: " + message){ }

Предположительно, просто опечатка из учебника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...