在C ++中宽松抛出说明符
我收到一个错误,说:
错误:'虚拟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()
添加到CPLAT析构函数的函数签名的末尾。
编辑:顺便说一句,我应该补充说,你可能不想使用throw说明符(除了throw()
在析构函数上),而没有真正知道这就是你想要的。 与Java的检查异常不同,它们不会在编译时被捕获,而是会在运行时终止程序(如果违反)。 所以,除非你知道你在做什么,否则最好不要使用它们。
http://www.agapow.net/programming/cpp/looser-throw-specifier
在〜CP_Window()的声明之后放了throw()吗?
谷歌搜索的顶部链接“宽松投掷说明符”顺便说一句。
链接地址: http://www.djcxy.com/p/27915.html上一篇: looser throw specifier for in C++
下一篇: virtual methods in C++ without editing production code?