我嘗試使我自己的異常,我可以拋出一個或兩個參數。所以我做的是重載我的異常的構造函數。然而第二個構造函數似乎沒有被調用。這裏是我的代碼:例外的C++重載構造函數
code-listing-1。
class myException: public std::exception {
public:
/*
* first constructor
*/
myException(unsigned short ExceptionCode):exception(){
code = ExceptionCode;
errorMessage = std::string("");
}
/*
* second constructor
*/
myException(unsigned short ExceptionCode, std::string errorMessage):exception(){
std::cout << "debugging message";//present here for debugging purpose only
code = ExceptionCode;
this->errorMessage = errorMessage;
}
const char * what() const throw()
{
std::string tmp;
switch(code){
case MYERROR_CODE_1:
tmp = std::string("MYERROR_CODE_1 : ");
if(errorMessage.empty())
tmp += std::string("this is a default error message for code 1");
tmp += errorMessage;
break;
case MYERROR_CODE_2:
tmp = std::string("MYERROR_CODE_2 : ");
if(errorMessage.empty())
tmp += std::string("this is a default error message for code 2");
tmp += errorMessage;
}
return tmp.c_str();
}
~myException() throw(){}
private:
std::string errorMessage;
unsigned short code;
};
和例如,當我把這種方式:
代碼上市-2。
void myFunction(myClass myObject){
//some code
if(conditionsMeet)
throw myException(MYERROR_CODE_2,"this is a more specific custom message for code 2");
//some other code
}
「調試消息」根本沒有出現。當我評論「第一個構造函數」時,我得到一個錯誤和很多警告。
error-listing-1。
main.cpp:28:41: error: no matching function for call to 'myException::myException(ExceptionCode)'
throw myException(MYERROR_CODE_2);
^
main.cpp:28:41: note: candidates are:
In file included from Node.h:12:0,
from main.cpp:10:
myException.h:50:5: note: myException::myException(short unsigned int, std::string)
myException(unsigned short ExceptionCode, std::string errorMessage):exception(){
^
myException.h:50:5: note: candidate expects 2 arguments, 1 provided
myException.h:44:7: note: myException::myException(const myException&)
class myException: public std::exception {
^
myException.h:44:7: note: no known conversion for argument 1 from 'ExceptionCode' to 'const myException&'
編輯:的錯誤碼是定義爲這樣:
代碼列表-2。
enum ExceptionCode{
MYERROR_CODE_1 = 1,
MYERROR_CODE_2 = 2,
};
任何人都可以向我解釋我做錯了什麼,爲什麼?提前致謝。
是'MYERROR_CODE_2'宏?在這種情況下,你可以張貼定義嗎? – Rakib
你得到錯誤(28)的'throw'行與你在代碼中顯示的不一樣。謹慎編輯問題,添加更多相關信息? – Massa
@Massa我的不如Jan Kukacka回覆我正在修改我的代碼的錯誤部分 –