我有一个类,其标题如下:
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编译器。
有人可以解释它为什么会发生以及如何解决它?
答案 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