Я пишу класс реализации btree 'btree' внутри файла btree.h и реализован внутри btree.tem с помощью внешнего класса итератора 'btree_iterator' в файле btree_iterator.h, реализованного в файле btree_iterator.tem
Вот (урезанное) содержимое btree.h:
#include "btree_iterator.h"
template <typename T> class btree
{
public:
friend class btree_iterator<T>;
typedef btree_iterator<T> iterator;
iterator find(const T& elem);
};
#include "btree.tem"
Теперь при реализации функции поиска у меня есть следующая реализация заглушки в btree.tem:
template <typename T> iterator btree<T>::find(const T& elem) //LINE 24
{
return NULL;
}
(я включил только строки кода, которые имеют отношение к моему вопросу)
При компиляции я получаю следующие ошибки:
btree.tem:24: error: expected constructor, destructor, or type conversion before 'btree'
Теперь я знаю, что это как-то связано с тем фактом, что я объявил typedef для итератора внутри объявления класса и поэтому ограничен областью действия только внутри этого блока. Но я попытался поместить другую строку typedef в btree.tem, но она просто не будет работать.
Как это должно быть написано?