противоречивая связь dll и определение статического члена данных dllimport не допускается

Предполагая, что у меня есть эти два файла:

header.h

class DLL ExportClass{
public:
  ExportClass();
  static int test;
};

Source.cpp

#ifdef EXPORT
    #define DLL __declspec(dllexport)
#else
    #define DLL __declspec(dllimport)
#endif

#include "Header.h"

int ExportClass::test = 0;
ExportClass::ExportClass(){
}

И я выигралт определитьEXPORT (чтобы импортировать уже экспортированный класс сstatic член), почему я получаю эти предупреждения:

1>source.cpp(11): warning C4273: 'test' : inconsistent dll linkage
1>          header.h(4) : see previous definition of 'public: static int ExportClass::test'
1>source.cpp(13): warning C4273: 'ExportClass::ExportClass' : inconsistent dll linkage
1>          header.h(3) : see previous definition of '{ctor}'

И эта ошибка:

1>source.cpp(11): error C2491: 'ExportClass::test' : definition of dllimport static data member not allowed

Если я определюEXPORT оно работает. Я вроде понимаю предупреждения, но я подумал, что статическая переменная и ctor могут игнорироваться компилятором, потому что весь класс объявлен как__declspec(dllimport) тем не мение. Я хочу использовать ту же кодовую базу для__declspec(dllexport) а также__declspec(dllimport) - но, похоже, компилятор stll пытается определить эти символы, которые помечены как__declspec(dllexport) в их декларации. Какова общая практика для решения этой проблемы?

Ответы на вопрос(2)

Ваш ответ на вопрос