Я получаю эту ошибку при попытке скомпилировать это:
template <typename T>
struct Temp
{
struct BaseIterator
{
protected:
int pos;
BaseIterator() : pos(0) {}
};
struct LeafIterator : public BaseIterator
{
int * operator * () { return &pos; }
LeafIterator() : BaseIterator() {}
};
};
Возвращает:
prog.cpp: In member function ‘int * Temp<T>::LeafIterator::operator*() const’:
prog.cpp:24:52: error: ‘pos’ was not declared in this scope
int * operator * () { return &pos; }
Тот же код без родительской Temp
структуры работает нормально, и такделает код, когда структура Temp
не является шаблоном.Точно так же, даже если член базы public
, я все равно получаю ошибку компилятора.
Я знаю, что могу ссылаться на унаследованные члены с помощью this->pos
, но добавление this->
везде очень сложнов коде.
Как я могу получить доступ к базовым элементам, не используя префикс всех их через this->
?
Редактировать: BaseIterator
просто содержит общий элемент для многих различных (но работает аналогично) итераторы.Я могу дублировать все элементы во всех итераторах и покончить с этим, но я хотел повторно использовать общий / общий интерфейс.