7

我最近得到了一个别人实现的dll。我必须在我的应用程序中使用它。在他们的类的头文件中,他们有函数声明

void func1() throw (CCustomException);

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

忽略 C++ 异常规范,除非指示函数不是 _declspec(nothrow)

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

我认为我的函数, myfunc()从 dll访问它func1()没有那个异常规范列表。因此,我也尝试在我的函数中使用相应的异常规范列表,

void myfunc1() throw (CCustomException);

但我仍然收到警告。该警告的全部内容是什么以及如何摆脱它?我在 Windows XP 中使用 Qt 4.5。

4

2 回答 2

11

好的,这是一个不可回答的问题,但我会丢弃异常规范,不再使用它

编辑:我读得太快了,我没有看到你自己没有写这门课。在 msvc 中消除警告的最佳方法是通过 #pragma warning(push) 后跟 #pragma warning(disable:xxxx) 其中 xxxx 是警告代码:

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

...

#ifdef _MSC_VER 
#pragma warning(pop)
#endif

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

于 2010-06-29T13:09:57.713 回答
0

您可以尝试使用预处理器:

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

void myfunc1() _throw (CCustomException);

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

于 2010-06-29T13:13:34.603 回答