我如何创建一个类,可以给我C4251警告

How could I create a class that can give me C4251 warning

本文关键字:警告 C4251 何创建 创建 一个      更新时间:2023-10-16

当我们在VC中编译代码时,我们有些东西有C4251警告。在我的例子中,大多数警告来自这样一个事实,即STL是_declspec(dllexport)类的成员。为了深入理解警告,我计划创建一个类来触发警告。我尝试了以下案例,但是没有给出C4251警告,我想知道是否可以给出一个简单的例子。谢谢!

我试过的案例:

class _declspec(dllexport) ClassTest
{
public:
      ExportClass<int> myexport;
     ClassUse myuse;
     int i;
};

案例1:

template <typename T>
class  ExportClass
{
public:
    T a;
    T b;
};

案例2:

class   ClassUse
{
public:
    int counts;
    float f_value;
    std::vector<int> abc;
    void get_func();
    template <typename T>
    T ouput_value()
    {
        return static_cast<T>(3);
    };
        template<class T>
        int connected()
        {
            T abc;
            return 3;
        }
};
编辑:

我想说清楚,警告不会来自调用STL。

在这种特殊情况下,您应该考虑MSDN:

编译器警告(级别1)C4251
'identifier':类'type'需要有dll接口供类'type2'的客户端使用

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

本页给出了一个给出警告消息的类的示例。

如果您希望生成警告消息而不使用STL,请参见以下示例:

class __declspec(dllimport) Foo
{
public:
    Foo();
    CString m_str; // WARNING C4251 HERE
};