Я уверен, что это что-то простое, но не смог найти другие посты, четко указывающие на это, хотя я уверен, что должен быть где-то похоронен.
В 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;
}
"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 наследующие конструкторы.
Других решений пока нет …