противоречивая связь 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)
в их декларации. Какова общая практика для решения этой проблемы?