在瘋狂的時刻,我決定編寫一個四叉樹C++模板類。我遇到了一些奇怪的編譯器錯誤,我不明白關於子類和指向模板的指針。我已經發現了一些哈克變通,但我想知道如果有人能闡明爲什麼我的代碼將無法編譯一些光...模板子類指針問題
我在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;
};
首先指針問題,我得到的是四叉樹的析構函數:
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
誰知道爲什麼我得到這些錯誤?我已經修復了這些問題,但我想知道爲什麼我不能這樣做。
詩篇。我編輯過的代碼在這裏顯示,所以我可能錯過了一些我認爲完全不相干的東西。
編輯。修正了四叉樹 - >四叉樹錯字
你在QuadTree與Quadtree – sje397 2010-07-06 11:15:03
中遇到了一些情況,修復了QuadTree錯字,這不是我原來的代碼。 – m0tive 2010-07-06 11:21:39