共用方式為


編譯器警告 (層級 2) C4275

non - DLL 介面類別 'class_1' 作為 DLL 介面類別 'class_2' 的基底

備註

導出的類別衍生自未導出的類別。

若要將具有 __declspec(dllexport) 的類別匯出時數據損毀的可能性降到最低,請確定:

  • 所有靜態資料都是透過從 DLL 匯出的函式來存取。

  • 類別中的任何內嵌方法都無法修改靜態資料。

  • 類別中沒有任何內嵌方法使用 CRT 函式或其他使用靜態資料的程式庫函式。

  • 沒有內嵌類別函式會使用CRT函式或其他連結庫函式,您可以在其中存取靜態數據。

  • 您的類別沒有任何方法(不論內嵌為何),都可以使用EXE和 DLL 中的具現化具有靜態數據差異的類型。

您可以藉由定義使用虛擬函式定義類別的 DLL,以及您可以呼叫的函式來具現化和刪除型別物件的函式,以避免導出類別。 然後,您可以直接在 類型上呼叫虛擬函式。

如果您衍生自 C++ 標準連結庫中的類型、編譯偵錯版本 (/MTd),以及編譯編譯程式錯誤訊息參考 _Container_base的位置,則 Visual C++ 可以忽略 C4275。

Example

下列範例會產生 C4275:

// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {};   // C4275