我收到一条错误消息:
错误:'virtual CPLAT::CP_Window::~CP_Window()'的抛出说明符更宽松
关于析构函数,我以前从未听说过这个,一些 Google 搜索说这可能是 GCC 4 问题,我不确定如何解决这个问题,因为我需要 GCC 4 来构建通用二进制文件。
我的环境:OS X 10.6、XCode 3.2.2、GCC 4 构建通用二进制文件。
问题是什么?
我假设 CPLAT 有一个基类?我还猜测您没有在 CPLAT 的析构函数上放置 throw 说明符?
您可以将
throw(X)
(其中 X 是逗号分隔的异常列表)放在函数签名的末尾,以指示允许抛出哪些异常。如果将 throw()
作为 throw 说明符,则表明该函数不能抛出任何异常。使用析构函数执行此操作相当常见,因为您不希望析构函数抛出异常。
重写具有 throw 说明符的函数的类不能具有比被重写的函数更宽松的 throw 说明符(列出更多异常),因为这表明派生类的函数可能违反基类函数的 throw 说明符。没有 throw 说明符意味着可以从该函数抛出任何异常,因此它是尽可能宽松的。
很可能,您需要将
throw()
添加到 CPLAT 析构函数的函数签名末尾。
编辑:顺便说一句,我可能应该补充一点,您可能不想在不真正知道这就是您想要的的情况下使用抛出说明符(除了析构函数上的
throw()
)。与 Java 的检查异常不同,它们不会在编译时捕获,而是在运行时如果违反则终止程序。因此,除非您知道自己在做什么,否则最好不要使用它们。
http://www.agapow.net/programming/cpp/loser-throw-specifier
您是否将 throw() 放在 ~CP_Window() 声明之后?
谷歌搜索“宽松投掷说明符”中的顶部链接顺便说一句。