Creating My Own Exception In QT and Throwing an Exception in a Function
c++, exception, qt
Solution
You're almost there. In a `throw` statement, you usually throw a temporary object of the exception class. E.g.
void Command(QString Command_in)
{
if(Command_in != "some string")
{
throw MyException{};
}
}
Technically, there's nothing wrong with naming the object, but it's one line longer and not more readable:
void Command(QString Command_in)
{
if(Command_in != "some string")
{
MyException someRandomName;
throw someRandomName;
}
}
Of course, this means you don't need a `raise()` method either. But if you would want one, it really should be `static` :
class MyException: public QtConcurrent::Exception
{
public:
static void raise() const {qDebug() << "\nException: "; throw MyException{};}
};
Problem
I am trying to make my own exception class in Qt. This is the first time I am doing it and I am confused as to how to throw my exemption inside of functions called in the main. What I Have Currently: myExcption.h ``` #ifndef MYEXCEPTION_H #define MYEXCEPTION_H #include <qtconcurrentexception.h> #include <QDebug> class MyException: public QtConcurrent::Exception { public: void raise() const {qDebug() << "\nException: "; throw *this;} }; #endif // MYEXCEPTION_H ``` Now currently how I throw exemptions is this: myFuction.h ``` void Commands(QString Command_in, MyException &wrongInput); ``` myFunction.cpp ``` void Command(QString Command_in, MyException &wrongInput) { if(Command_in != "some string") { wrongInput.raise(); } } ``` main.cpp ``` String s = "some String"; MyException wrongString; try { Command(s, wrongString); } catch(MyException &wrongString) { qDebut << "String invalid"; } ``` Now this works, but I feel as if I should not have to pass in a reference of my exception to every function. What are my options? Here is what I feel I should be able to do, but I am not sure how to do it. myFunction.cpp ``` void Command(QString Command_in) { if(Command_in != "some string") { throw myException; } } ``` main.cpp ``` QString s = "some String"; try { Command(s); } catch(MyException &wrongString) { qDebut << "String invalid"; } ``` Is this possible?