2010-06-29 102 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