warning C4251 - Jemand ne Idee ?



  • Hallo zusammen,

    bekomme folgende Warnung beim kompilieren meines Projektes:

    Compiler, Microsoft Visual C++ 6.0 schrieb:

    warning C4251: '_sivItems' : class 'std::vector<class CMenuControl *,class std::allocator<class CMenuControl *> >' benoetigt ein
    e DLL-Schnittstelle, die von Clients von class 'CMenuControl' verwendet wird

    Etwas Hintergrund:
    Ich hab ne Klasse die ein PopupMenu darstellt. Diese benutzt Objekte der std::string bzw std::vector-Klasse. Die Klasse ist mit den Schlüsselworten:

    // __declspec(dllexport)
    // Also so:
    class __declspec(dllexport) CMenuControl : public CThunkInject
    {
       // ...
    };
    

    definiert.

    Weiß jemand, wie ich das Problem lösen kann ?

    PS: Das es nur eine Warnung ist, lässt sich das Projekt einwandfrei kompilieren, aber ich finde die Warnung sieht wichtig aus.





  • Hm danke aber da werden keine std::strings behandelt...und wenn ich ehrlich bin versteht ich den Artikel nicht ganz...könnte mit vllt jmd ein kleines Beispiel geben 😞



  • Wenn du dir diesen Artikel durchliest (ein paar Grundkenntnisse in Englisch sind schon fast Pflicht für einen Programmierer), wirst du erkennen, daß das ein generelles Problem in der Kombination von Templates und DLLs ist (und ob du's glaubst oder nicht: auch std::string ist ein template - der heißt komplett "std::basic_string<char,std::char_traits<char>,std::allocator<char> >"), also kannst du die dort vorgeschlagenenen Lösungen auch generell einsetzen.


Anmelden zum Antworten