我最近得到了其他人实施的DLL。我必须在应用程序中使用它。在他们的课程的标题文件中,他们具有函数声明

void func1() throw (CCustomException);

现在,当我编译时,它会得到警告,

C ++异常规范忽略了,除了指出函数不是_declSpec(nothrow)

我读了 MSDN-文档 但无法清楚地理解。另外,我不想仅仅因为出现警告而禁用警告。我想知道我在做错什么而不是禁用它。

我以为我的功能, myfunc() 访问 func1() 从DLL中没有该异常规范列表。因此,我也尝试在我的函数中使用相应的异常规范列表,

void myfunc1() throw (CCustomException);

但是我仍然得到警告。那是什么警告是什么,以及如何摆脱它?我在Windows XP中使用QT 4.5。

有帮助吗?

解决方案

好的,这是一个非答案,但我会 丢弃异常规范,再也不会使用它.

编辑:我阅读得太快了,我看不到您没有自己写课。摆脱MSVC警告的最佳方法是通过#pragma警告(推送),然后是#pragma警告(Disable:XXXX),其中XXXX是警告代码:

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

...

#ifdef _MSC_VER 
#pragma warning(pop)
#endif

编辑:禁用警告是完全安全的。异常规格是邪恶的,编译器只告诉您它正在为您致残。即使它破坏了标准。

其他提示

您可以尝试与预处理器一起玩:

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

void myfunc1() _throw (CCustomException);

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

我找到了这个 关联, ,我发现有用。只是添加了可能对某人有帮助的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top