我怎么能创建一个可以给我C4251警告的课程

时间:2013-06-17 10:06:08

标签: c++ visual-studio-2010

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

2 个答案:

答案 0 :(得分:2)

This page给出了一个提供警告消息的类的示例。

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

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

答案 1 :(得分:2)

在这种特殊情况下你应该考虑MSDN

  

编译器警告(级别1)C4251
  'identifier':class'type'需要让dll-interface被'type2'类的客户使用

这可能发生在

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