2010-06-29 56 views
7

我最近得到了一个已被其他人实现的DLL。我必须在我的应用程序中使用它。在他们的类的头文件,他们有函数声明如何摆脱“忽略C++异常规范”的警告

void func1() throw (CCustomException); 

现在,当我编译我得到警告,除了指示功能忽略

C++异常规范不 _declspec( nothrow)

我看了MSDN - Documentation,但是看不清楚。另外,我不想仅仅因为它出现而禁用警告。我想知道我在做什么,而不是禁用它。

我想我的功能,myfunc()访问该func1()从DLL不具有异常规范列表。因此,我尝试在我的功能也有相应的例外规范列表,因为

void myfunc1() throw (CCustomException); 

但我仍然收到警告。这个警告是什么,以及如何摆脱它?我在Windows XP中使用Qt 4.5。

回答

11

好的,这是一个非答案,但我会throw away the exception specification and never use it again

编辑:我读得太快了,我没有看到你没有自己写课。最好的办法通过的#pragma警告(推)之后的#pragma警告摆脱MSVC警告(禁用:XXXX),其中xxxx是警告代码:

#ifdef _MSC_VER 
#pragma warning(push) 
#pragma warning(disable:xxxx) 
#endif 

... 

#ifdef _MSC_VER 
#pragma warning(pop) 
#endif 

编辑:这是完全安全的禁用警告。异常规范是邪恶的,编译器只告诉你它正在为你禁用它们。即使它打破了标准。

+2

它听起来像它正在编译为C++ 0x,其中像这样的异常规范已弃用,而不是C++ 03。可能有编译器选项指定你想要'03,或者只是为了重新启用异常规范,如果你想要其他'0x功能。 – 2010-06-29 13:39:40

+0

@Alexandre C,雅我同意禁用和所有,但警告是关于什么?它为什么会发生,背后的基本原理是什么?我只是想知道这些.. – liaK 2010-06-30 04:10:11

+0

@liaK:查看Alexandre发布的链接。 – Philipp 2010-06-30 05:52:26

0

你可以尝试用预处理玩:

#ifdef _SOME_MSVC_DEFINE 
# define _throw(foo) 
#else 
# define _throw(foo) throw(foo) 
#endif 

void myfunc1() _throw (CCustomException); 

或者,尝试禁用在Visual Studio中的警告。

0

我发现这个link,我发现它很有用。刚刚添加,如果它可能对某人有所帮助..

+0

虽然这可能在理论上回答这个问题,[这将是更可取的](/元。stackoverflow.com/q/8259)将答案的重要部分包括在内,并提供参考链接。 – 2015-07-08 20:57:41