gpt4 book ai didi

c++ - 超越错误...松散...可能违反 C++ 语言规范?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:48 27 4
gpt4 key购买 nike

我看过这个问题,没看出问题出在哪里。我不是 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 年??)以及您可以在派生类中声明指针的位置有关。但我不确定这里是否属于这种情况以及如何解决这个问题。

如有任何关于具体错误或如何解决此问题的想法,我们将不胜感激。

谢谢

最佳答案

XGYAAFError 有一个类型为 std::string 的成员变量,它有一个非平凡的析构函数,可以抛出任何异常。如您所见,std::exception 具有一个用户声明的析构函数,该析构函数被声明为不抛出异常。

因此,由于覆盖规则,XGYAAFError 需要一个用户声明的析构函数,其中包含一个 throw() 异常规范。我在问题 "How does an exception specification affect virtual destructor overriding?" 中提供了对此主题的深入解释。有关详细信息,请参阅该问题。

关于c++ - 超越错误...松散...可能违反 C++ 语言规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11837149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com