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?