Я все еще в процессе изучения C ++. Это мой сценарий.
У меня есть три класса. Самый верхний базовый класс является шаблонным.
Средний класс, основанный на базе, тоже является шаблонным.
Производный (класс Concrete), который я намерен использовать, наследует средний класс.
Я явно создаю экземпляр для среднего класса. Однако компилятор каждый раз выдает ошибку
что Базовый класс не определен. Как создать экземпляр среднего класса таким образом, чтобы
базовый класс полностью определен?
Вот обзор того, как эти классы определены:
TopBase.h
template <class T>
class TopBase
{
typedef typename T::Concrete Concrete;
}
Middle.h
template <class T>
class Middle : public TopBase<T>
{
typedef typename T::Concrete Concrete;
}
Middle() : TopBase<T>() {}
Concrete.h
struct TConcrete {
static int x;
typedef Concrete instance;
}class Concrete :
public Middle<TConcrete>
{
}
У вас есть ошибка в вашем экземпляре typedef Concrete, потому что конкретное имя типа используется при создании экземпляра Middle.
template <class T>
class TopBase
{
typedef typename T::Concrete Concrete;
};
template <class T>
class Middle : public TopBase<T>
{
public:
Middle() : TopBase<T>() {}
typedef typename T::Concrete Concrete;
};
class ConcreteX;
struct TConcrete {
static int x;
typedef ConcreteX Concrete; // <-- here was an error
};
class ConcreteX :
public Middle<TConcrete>
{
};
Других решений пока нет …