//why commented below is not works
char tmp[13 + sizeof(argumentCallCounter)];
Это не будет работать, потому что tmp
является локальным для функции и больше не существует после выхода из функции, но вы все еще пытаетесь получить к нему доступ из main()
.
Я бы предложил вам использовать std::string
в BaseException
и везде.
Я бы также предложил вам отловить исключение по ссылке const
как:
catch (const BaseException & e)
// ^^^^^ note ^ note
РЕДАКТИРОВАТЬ:
Реализуйте BaseException
следующим образом:
class BaseException : std::exception
{
public:
BaseException(std::string msg) : message(msg) {}
//override std::exception::what() virtual function
virtual const char* what() const throw()
{
return message.c_str();
}
private:
std::string message;
};
Используйте его как:
try
{
//some code that might throw BaseException
}
catch (const BaseException & e)
{
cout << "exception message : " << e.what() << endl;
}
РЕДАКТИРОВАТЬ:
И реализуйтеwrong()
как
void wrong() {
unsigned short int argumentCallCounter = 1;
std::stringstream ss;
ss << "No " << argumentCallCounter << " argument";
throw BaseException(tmp.str());
}