0

VC でコードをコンパイルすると、C4251 警告が表示されます。_declspec(dllexport)私の場合、ほとんどの警告は、STL がクラスのメンバーであるという事実から来ています。警告を深く理解するために、警告に興味をそそるクラスを作成する予定です。以下のケースを試してみましたが、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 を呼び出しても警告が表示されないことを明確にしたいと思います。

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
'identifier' : クラス 'type' には、クラス 'type2' のクライアントが使用する dll-interface が必要です

これは次の場合に発生する可能性があります

// 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 に答える