2012-08-06 1 views
4

이 문제를 조사한 결과 문제가있는 곳을 보지 못했습니다. 나는 C++의 전문가가 아니기 때문에 나에게 이것은 괜찮아 보인다. 이것은 내가 마지막으로 시도했을 때 문제없이 컴파일하는 데 사용되었습니다. 오버 라이딩 오류 ... Lax ... 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

질문의 형식을 올바르게 지정하십시오. –

답변

4

XGYAAFError는 예외를 발생시킬 수 사소 소멸자 갖는다 std::string 형의 멤버 변수를 갖는다. std::exception에는 예외를 throw하지 않는 것으로 선언 된 사용자 선언 소멸자가 있습니다.

따라서 우선 규칙 때문에 XGYAAFError에는 throw() 예외 지정이있는 사용자 선언 소멸자가 필요합니다. 나는이 문제에 대한 심층적 인 설명을 "How does an exception specification affect virtual destructor overriding?" 질문에 제공했다. 자세한 내용은이 질문을 참조하십시오.

+0

James ... 신속한 응답에 감사드립니다. 나는 링크를 따라 가서 읽었다. 나는 C++에 관한 나의 책에서 이것에 대해서도 읽었다. 수정 프로그램을 구현하려고했지만 실패했습니다. 분명히 나는해야 할 일을 얻지 못하고있다. 나는 부과하는 것을 싫어하지만, 당신이 무엇을 바꿀 것인지, 어떻게 구체적으로 나타낼 수 있습니까? 내가 한 일과 다른면 그 일을 시도 할 것입니다. 다시 C++ 초보자의 도움을 주셔서 감사합니다. – user1580494

+1

'XGYAAFError'에 대한 소멸자를 제공해야합니다. 예를 들어, ~ XGYAAFError() throw() {}'. –

+0

그걸 정리 해줘서 고마워.이 물건을 처음 읽을 때 나는 그것을 얻지 못했다. – user1580494