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