2013-06-17 1 views
0

Quand nous compilons des codes dans VC, nous avons quelque chose les avertissements C4251. Dans mon cas, la plupart des avertissements proviennent du fait que STL est un membre de la classe _declspec(dllexport). Afin d'avoir une compréhension profonde de l'avertissement, je prévois de créer une classe qui va intriguer l'avertissement. J'ai essayé les cas suivants, mais aucun avertissement C4251 n'est donné, et je me demandais si un exemple simple peut être donné. Merci!Comment est-ce que je pourrais créer une classe qui peut me donner l'avertissement C4251

Les cas j'ai essayé:

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

Cas 1:

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

Cas n ° 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; 
     } 

}; 

EDIT:

I w ant pour préciser que l'avertissement ne proviendra pas de l'invocation de STL.

Répondre

2

This page donne un exemple d'une classe qui donne le message d'avertissement.

Voir l'exemple suivant si vous souhaitez générer le message d'avertissement sans utiliser STL:

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

Merci, mais je veux créer une classe qui génère l'avertissement sans lien vers STL. Désolé, je n'ai pas été clair. – feelfree

+0

J'ai mis à jour ma réponse avec un autre exemple. – George83

2

Vous devriez considérer MSDN dans ce cas particulier:

compilateur Avertissement (niveau 1) C4251 'Identifier': la classe 'type' doit avoir une interface dll pour être utilisée par les clients de la classe 'type2'

cela peut se produire lorsque

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