Здравствуйте, V488, Вы писали:
V>//Archiv.h=========================
V>#include "Device.h"
V>class Archiv
V>{
V> //подключаем соответствующий класс носителя
V> #ifdef RAMSTOR
V> #include "RamStor.h"
V> RamStor Store;
V> #endif
V> #ifdef RAMSTOR -> FSTOR
V> #include "FStor.h"
V> FStor Store;
V> #endif
V> int Open(char);
V>};
Очепятка?
Здравствуйте, V488, Вы писали:
V>Как на этапе компиляции определять реализвцию компонета Store?
Верной дорогой идёте, товарищи, к нарушению ODR!
Условная компиляция — это крайняя мера, и управляться она должна дефайнами в свойствах проекта. В противном случае есть риск скомпилировать два .cpp файла с разными дефайнами...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Здравствуйте, V488, Вы писали:
V>Как на этапе компиляции определять реализвцию компонета Store?
...
Подозреваю, что проблема в содержимом "RamStor.h"/"FStor.h" которое включается внутрь определения класса.
Попробуй примерно так:
//Archiv.h=========================
#include "Device.h"
#ifdef RAMSTOR
#include "RamStor.h"
typedef RamStor UsedStor;
#endif
#ifdef FSTOR
#include "FStor.h"
typedef FStor UsedStor;
#endif
class Archiv
{
//подключаем соответствующий класс носителя
UsedStor Store;
int Open(char);
};
Это вероятно избавит от ошибки не, как как заметил Кодт -это путь к ошибкам, связанным с ODR.
Более устойчивый к ошибкам вариант:
//Device.h ========================
#include "RamStor.h"
#include "FStor.h"
//// Переключатель:
//typedef RamStor UsedStor;
typedef FStor UsedStor;
//Archiv.h=========================
#include "Device.h"
template<class XStor=UsedStor>
class Archiv
{
//подключаем соответствующий класс носителя
XStor Store;
int Open(char);
};