As your class derives from logic_error, logic error would be created when your class is created. logic_error does not have a default constructor, so you cannot use it and need to explicitely call some other constructor. Coincidentally this is exactly what error message told you.
No. Why would it. it is merely returning a pointer to c-string. Where would output it? To screen, file, send over network, to the memory mapeed device, to some periferial? You did not specified.
THis std::cout << e.what() would tell program to output it in standard output stream, but you do not have anything similar in your program.