Добавление строки при выдаче ошибки в C++

Я уверен, что это что-то простое, но не смог найти другие посты, четко указывающие на это, хотя я уверен, что где-то там должен быть один похоронен.

В C++ при использовании блока try catch описанным ниже способом, как я могу добавить строковую переменную к сообщению об ошибке?

Я получаю необработанное исключение при попытке сделать это. Это как-то связано с тем, какой тип передается обратно? По-видимому, возвращает строку против символа *. если это правильно, это вызовет проблему? Как бы я приспособился к этому? Я попытался добавить дополнительный улов (const string my_msg), но это тоже не сработало.

string msg = "message";
try{
    if (...)
        throw "My error " + msg;
    }
catch (const char* my_msg){
    cerr << my_msg << endl;
}

1 ответ

Решение

"My error " + msg это операция, которая объединяет const char* строка и std::string, Эта операция приводит к временной переменной типа std::string, Поэтому брошенная переменная должна быть перехвачена предложением catch типа std::string,

catch (const std::string& my_msg){
    cerr << my_msg << endl;
}

Тем не менее, лучше использовать ваши исключения из std::exception, Вам не нужно создавать свой собственный класс исключений, так как std::runtime_error и его производные, которые предоставляют полезные классификации распространенных исключений времени выполнения.

Во многих случаях вам нужно иметь отдельный тип для ваших исключений, часто это может быть проект или предметная область. В C++11 создание собственного типа исключения так же просто, как это

struct my_exception : std::runtime_exception {
    using std::runtime_exception::runtime_exception;   // Inherit runtime_exception's constructors
};

Это использует наследующие конструкторы C++11.

Другие вопросы по тегам