Проблема
У меня есть исключение GLSLFailedToLoadException, которое является производным от класса исключения GlHelperException.
В GlHelperException есть функция виртуального выброса для описания ошибки со свойством title исключения и номером строки симя_файла.
Но когда я проверяю исключение в основной функции, блок catch не печатает правильный журнал отладки функции what () и возвращает терминат, вызванный после генерирования исключения GLSLFailtedToLoadException.
Определение исключительной ситуации
class GlHelperException: public std::exception{
public:
virtual const char* what() const throw(){
return (std::string(this->title) +
" - in file " +
std::string(this->filename) +
" at line " +
std::to_string(this->line)).c_str();
}
protected:
const char *title;
const char *filename;
int line;
};
class GLSLFailedToLoadException: public GlHelperException{
public:
GLSLFailedToLoadException(const char *filename, int line);
};
GLSLFailedToLoadException::GLSLFailedToLoadException(const char *filename, int line){
this->filename = filename;
this->line = line;
this->title = "Failed to load and compile GLSL program ";
}
Место проведения теста
int main(int argc, char **argv){
/* Irrelevant Code*/
try{
throw new GLSLFailedToLoadException(__FILE__, __LINE__);
}
catch(GLSLFailedToLoadException &e){
std::cout<<"Exception Caught"<<std::endl;
std::cout<<e.what()<<std::endl;
}
return 0;
}
Фактические результаты
terminate called after throwing an instance of 'GLSLFailedToLoadException*'
Aborted (core dumped)
Ожидаемые результаты
Failed to load and compile GLSL program in __FILE__ at __LINE__