2012-08-06 75 views
4

我看過這個問題,並沒有看到問題出在哪裏。我不是C++的專家,所以對我來說這看起來不錯。這用於在我上次嘗試時沒有問題地進行編譯。在騎乘錯誤...鬆弛... C++語言規範違規可能?

namespace yaaf { 

/************************************************************************/ 
/*                       */ 
/*  Standard YAAF Errors               */ 
/*                       */ 
/************************************************************************/ 

/*  XGYAAFError 
* 
*   YAAF Error; this is the root of my YAAF errors, and is 
*  a descendant of the standard exception class 
*/ 

class XGYAAFError : public std::exception { 
    public: 
      explicit XGYAAFError(const char *); 
      explicit XGYAAFError(const std::string &err); 

      const char *what() const throw() 
      { 
       return fError.c_str(); 
      } 

    private: 
      std::string fError; 
}; 

} // namespace yaaf 

#endif 

GCC的庫基類...

/** 
    * @brief Base class for all library exceptions. 
    * 
    * This is the base class for all exceptions thrown by the standard 
    * library, and by certain language expressions. You are free to derive 
    * your own %exception classes, or use a different hierarchy, or to 
    * throw non-class data (e.g., fundamental types). 
    */ 
    class exception 
    { 
    public: 
    exception() throw() { } 
    virtual ~exception() throw(); 

    /** Returns a C-style character string describing the general cause 
    * of the current error. */ 
    virtual const char* what() const throw(); 
    }; 

錯誤「壓倒一切的功能規格比基礎版更寬鬆」,是當我嘗試建立什麼我現在得到。

我認爲這可能與C++語言(大約在2004年)的變化有關,您可以在派生類中聲明指針。但我不確定這是否是這種情況,以及如何解決這個問題。

有什麼想法是什麼具體是錯誤的或我可以如何解決這個問題,表示讚賞。

由於

+0

請格式化您的問題! – 2012-08-06 23:04:23

回答

4

XGYAAFError具有std::string類型的成員變量,它具有一個非平凡的析構函數,可以拋出任何異常。如您所見,std::exception有一個用戶聲明的析構函數,聲明爲不引發異常。

因此,由於最重要的規則,XGYAAFError需要一個用戶聲明的析構函數和一個throw()異常規範。我在問題中提供了對該主題的深入解釋,"How does an exception specification affect virtual destructor overriding?"查看該問題以獲取詳細信息。

+0

詹姆斯....感謝您的及時迴應。我遵循鏈接並閱讀它們。我還在我的C++書中閱讀了這方面的內容。試圖執行一個修復程序,但它失敗了。顯然我沒有得到什麼需要做。我討厭強加,但是你能否特別指出你會改變什麼,以及如何......如果它與我所做的不同,我會嘗試。再次感謝C++新手的幫助。 – user1580494 2012-08-07 20:02:45

+1

你需要爲'XGYAAFError'提供一個析構函數。例如'〜XGYAAFError()throw(){}'。 – 2012-08-07 21:03:11

+0

謝謝,清除它..我只是沒有得到它,我第一次讀這個東西通過。 – user1580494 2012-08-07 22:32:54