niespójne powiązanie dll i definicja elementu danych statycznych dllimport jest niedozwolone

Zakładając, że mam te dwa pliki:

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(){
}

I nie zdefiniujęEXPORT (aby zaimportować już wyeksportowaną klasę za pomocąstatic członek), dlaczego otrzymuję te ostrzeżenia:

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}'

I ten błąd:

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

Jeśli zdefiniujęEXPORT to działa. W pewnym sensie rozumiem ostrzeżenia, ale pomyślałem, że zmienna statyczna i ctor mogą zostać zignorowane przez kompilator, ponieważ cała klasa jest zadeklarowana jako__declspec(dllimport) tak czy inaczej. Chcę użyć tej samej bazy kodu dla__declspec(dllexport) i__declspec(dllimport) - ale wydaje się, że kompilator próbuje zdefiniować te symbole, które są oznaczone jako__declspec(dllexport) w ich deklaracji. Jaka jest powszechna praktyka rozwiązywania tego problemu?

questionAnswers(2)

yourAnswerToTheQuestion