В момент безумия я решил написать шаблонный класс C ++ для дерева quadtree.Я столкнулся с некоторой странной ошибкой компилятора, которую я не понимаю в отношении подклассов и указателей на шаблоны.Я нашел несколько хакерских обходных путей, но мне было интересно, кто-нибудь может пролить свет на то, почему мой код не компилируется ...
Я нахожусь в Linux, собираю с помощью scons, использую g ++
Мой код выглядит примерно так: у меня есть шаблонный класс для описания дерева и подкласс, описывающий «листья»:
template <class value_type>
class QuadTree
{
public:
class Leaf //-Subclass--------------------------
{
friend class QuadTree< value_type >;
protected:
value_type* m_data;
Leaf();
~Leaf();
}; //-end-subclass------------------------------
QuadTree();
~QuadTree();
Leaf * Insert ( const value_type & _x );
protected:
QuadTree( Quadtree< value_type >* _parent );
QuadTree< value_type >* m_parent;
QuadTree< value_type >* m_children[4];
std::set< Leaf* > m_leaves;
};
Первая проблема с указателем, которую я получаю, заключается в деструкторе QuadTree:
template <class value_type>
QuadTree< value_type >::~QuadTree()
{
// ... Delete children ...
// I allocate each leaf, so I need to delete them
std::set< Leaf* >::iterator it = m_leaves.begin(); // <-- bad
std::set< Leaf* >::iterator endit = m_leaves.end(); // <-- bad
for(;it != endit; ++it)
delete *it;
}
Когда я компилирую, я получаю эту ошибку: expected ';' before ‘it’
и expected ';' before ‘endit’
.Другая ошибка указателя находится в определении функции Вставить:
template <class value_type>
Leaf * QuadTree< value_type >::Insert ( const value_type & _x ) // <-- bad
{
// Insert stuff...
}
Я получаю ошибку компиляции: expected constructor, destructor, or type conversion before ‘*’ token
Кто-нибудь знает, почему я получаю эти ошибки?У меня есть исправления для проблем, но я хочу знать, почему я не могу сделать это таким образом.
Ps.Я отредактировал код, чтобы показать его здесь, поэтому, возможно, я пропустил то, что мне показалось совершенно неуместным.
Редактировать.Исправлена ошибка Quadtree -> QuadTree