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

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

В 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;
}

0

Решение

"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 наследующие конструкторы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]