0

当我们在 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;
};

案例二:

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。

4

2 回答 2

2

这个页面给出了一个给出警告信息的类的例子。

如果您想在不使用 STL 的情况下生成警告消息,请参见以下示例:

class __declspec(dllimport) Foo
{
public:
    Foo();
    CString m_str; // WARNING C4251 HERE
};
于 2013-06-17T10:08:57.630 回答
2

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

编译器警告(级别 1)C4251
'标识符':类 '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
于 2013-06-17T10:09:36.913 回答