2011-03-06 16 views
12

在VS2008C4275警告

警告C4275編譯我的代碼時,我得到這樣的警告:非的dll接口類「的std :: runtime_error」作爲基礎的dll接口類「MyException」 2> C:\ Program Files文件(x86)的\微軟的Visual Studio 9.0 \ VC \包括\ stdexcept(148):看 '的std :: runtime_error' 的聲明

我的類定義爲

class MyException : public std::runtime_error 

回答

15

MSDN:http://msdn.microsoft.com/en-us/library/3tdb471s.aspx

「導出的類[如在DLL中]是從未導出的類派生的[如DLL]。」

顯然你聲明MyException可以從DLL中導出(使用:__declspec(dllexport)),而std::runtime_error是不可導出的。考慮MyException是否真的需要導出。但是,如果上述頁面上列出的問題都不適用於您的具體情況,那麼您可以忽略該警告 - 只需注意問題即​​可。

+1

從上面鏈接的頁面:「如果您從標準C++庫中的類型派生,C4275可以在Visual C++中忽略」。你是從'std :: runtime_error'派生的,因此你可以忽略這個警告。 – mbdevpl 2015-09-27 08:22:38

0

我在這裏找到了解決同一問題的答案。我有一個從std :: runtime_error派生的自定義異常,並從我的dll導出它。

對於例外情況,似乎最簡單的解決方案是不導出派生類。如果將實現從源(.CPP)文件移動到標頭(.HPP)中,則可以執行此操作。對我而言,這是微不足道的。我想在大多數情況下,這是例外情況。

這是一件「好事」,因爲客戶端實際編譯和鏈接自定義異常的實現與他們的std :: runtime_error的實現。這就是你想要的,事實上,C4275警告試圖保護你:兩個std :: runtime_exception對象類型之間的運行時不兼容。