在包含自己类型的静态成员的类中使用__declspec(dllimport)

时间:2016-02-26 00:26:55

标签: c++ windows mingw dllimport

我有一个类,其标题如下:

class MYCLASS_DECLSPEC MyClass
{
    MyClass(int x);

    ....

    static const MyClass Zero;
}

在实现文件中,我初始化了静态const成员:

const A A::Zero(0);

现在我想将此代码编译为DLL,有时也编译为静态库。通常的做法是像这样定义MYCLASS_DECLSPEC:

#ifdef BUILDING_MYDLL
#define MYCLASS_DECLSPEC __declspec(dllexport)
#else
#define MYCLASS_DECLSPEC __declspec(dllimport)
#endif

当我将此代码编译为DLL(定义了BUILDING_MYDLL)时,一切正常。但是当我将此代码编译为静态库(未定义BUILDING_MYDLL)时,我收到以下错误:

error: definition of static data member 'MyClass::Zero' of dllimport'd class

如果我完全删除__declspec(dllimport),代码将成功编译为静态库。

我在Windows 7上使用mingw32编译器。

有人可以解释它为什么会发生以及如何解决它?

1 个答案:

答案 0 :(得分:0)

我认为我们将 #defines 放在另一个 #define 中:

#ifdef _DLL
#ifdef BUILDING_MYDLL
#define MYCLASS_DECLSPEC __declspec(dllexport)
#else
#define MYCLASS_DECLSPEC __declspec(dllimport)
#endif
#else
#define MYCLASS_DECLSPEC
#endif