編譯器警告 (層級 2) C4275
non - DLL 介面類別別 'class_1' 作為 DLL 介面類別別 ' class_2 ' 的基底
匯出的類別衍生自未匯出的類別。
若要將具有 __declspec(dllexport) 的類別匯出時資料損毀的可能性降到最低,請確定:
所有靜態資料都是透過從 DLL 匯出的函式來存取。
類別的內嵌方法無法修改靜態資料。
類別中沒有任何內嵌方法會使用 CRT 函式或其他使用靜態資料的程式庫函式。
沒有內嵌類別函式會使用 CRT 函式或其他程式庫函式,您可以在其中存取靜態資料。
您的類別沒有任何方法(不論內嵌為何),都可以使用 EXE 和 DLL 中的具現化具有靜態資料差異的類型。
您可以藉由定義使用虛擬函式定義類別的 DLL,以及您可以呼叫的函式來具現化和刪除型別物件的函式,以避免匯出類別。 然後,您可以直接在 類型上呼叫虛擬函式。
如果您衍生自 C++ 標準程式庫中的類型、編譯偵錯版本 ( /MTd ),以及編譯編譯器錯誤訊息參考 _Container_base
的位置,則可以在 Visual C++ 中忽略 C4275。
// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {}; // C4275