我收到的错误是:
错误:’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()添加到CPLAT析构函数的函数签名的末尾.
编辑:顺便说一句,我应该补充一点,你可能不想在不知道这就是你想要的东西的情况下使用throw说明符(析构函数除了throw()).与Java的已检查异常不同,它们不会在编译时捕获,而是在运行时终止程序(如果违反).所以,除非你知道自己在做什么,否则最好不要使用它们.