我收到的错误是:
错误:'虚拟CPLAT :: CP_Window :: ~CP_Window()'的错误抛出说明符
在析构函数上,我以前从未听说过这一点,一些谷歌搜索说这可能是GCC 4问题,我不知道如何处理,因为我需要GCC 4来构建通用二进制文件。
我的环境:OS X 10.6,XCode 3.2.2,GCC 4构建通用二进制文件。
问题是什么?
答案 0 :(得分:12)
我认为CPLAT有一个基类?我也猜测你没有在CPLAT的析构函数上放置一个throw说明符?
您可以在函数签名的末尾放置throw(X)
(其中X是以逗号分隔的异常列表),以指示允许抛出的异常。如果将throw()
作为throw说明符,则表示不能从该函数抛出异常。使用析构函数执行此操作是相当常见的,因为您不希望析构函数抛出异常。
重写具有throw说明符的函数的类不能具有比被重写的函数更宽松的抛出说明符(列出更多异常),因为这表明派生类的函数可能违反了基类的throw说明符'功能。没有throw说明符意味着可以从该函数抛出任何异常,因此它就像它可以获得的那样松散。
很可能,您需要将throw()
添加到CPLAT析构函数的函数签名的末尾。
编辑:顺便说一下,我可能会补充一点,你可能不想在析构函数中使用throw说明符(除了throw()
之外)而不是真的知道那就是你想要的。与Java的已检查异常不同,它们不会在编译时捕获,而是在运行时终止程序(如果违反)。所以,除非你知道自己在做什么,否则最好不要使用它们。
答案 1 :(得分:5)
http://www.agapow.net/programming/cpp/looser-throw-specifier
你是否在声明~CP_Window()之后放了throw()?
Google搜索中的热门链接“looser throw specifier”BTW。