2014-02-27 98 views
3

我想在Qt中創建自己的異常類。這是我第一次這樣做,我很困惑如何把我的豁免放在主要函數中。在QT中創建我自己的異常並在函數中拋出異常

我有什麼目前:

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 

現在目前我怎麼扔豁免是這樣的:

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

現在這個工作,但我覺得我不應該在我的例外每一個引用傳遞功能。我有什麼選擇?這是我覺得我應該能夠做到的,但我不知道該怎麼做。

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

這可能嗎?

回答

2

你快到了。在throw聲明中,通常會引發異常類的臨時對象。例如。

void Command(QString Command_in) 
{ 
    if(Command_in != "some string") 
    { 
     throw MyException{}; 
    } 
} 

從技術上講,有什麼不對的命名對象的,但它是一個線長,而不是更具可讀性:

void Command(QString Command_in) 
{ 
    if(Command_in != "some string") 
    { 
     MyException someRandomName; 
     throw someRandomName; 
    } 
} 

當然,這意味着你不需要raise()方法無論是。但如果你想要一個,它應該是static

class MyException: public QtConcurrent::Exception 
{ 
public: 
    static void raise() const {qDebug() << "\nException: "; throw MyException{};} 
};