warning C4251

最近调试程序,出现警告C4251。
下列内容摘自MSDN 网站: http://msdn.microsoft.com/zh-cn/library/esew7y1w(VS.80).aspx
编译器警告(等级 1)C4251

 

错误消息

“identifier”: 类“type”需要由类“type2”的客户端使用 dll 接口

 

要在使用 __declspec(dllexport) 导出类时使数据损坏的可能性降到最小,请确保:

  • 通过从 DLL 导出的函数访问所有静态数据。

  • 类的任何内联方法都不能修改静态数据。

  • 类的所有内联方法都不使用 CRT 函数或使用静态数据的其他库函数(有关更多信息,请参见 PRB:跨 DLL 边界传递 CRT 对象时可能出现的错误)。

  • 如果 EXE 和 DLL 中的实例化具有静态数据差异时,类的任何方法(无论是否为内联)都不能使用类型。

通过定义一个 DLL 可以避免导出类,该 DLL 定义一个具有虚函数的类,您可以调用这些函数对该类型的对象进行实例化和删除。 然后在该类型上调用虚函数即可。

 

 

有关导出模板的更多信息,请参见 http://support.microsoft.com/default.aspx?scid=kb;zh-cn;168958

如果要从标准 C++ 库中的类型派生,并且要编译调试版本 (/MTd),而且编译器错误信息引用 _Container_base,则在 Microsoft Visual C++ 2005 中可以忽略 C4251。

 

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

你可能感兴趣的:(warning C4251)