c – 模板子类指针问题
发布时间:2020-12-16 09:28:39 所属栏目:百科 来源:网络整理
导读:在疯狂的时刻,我决定写一个四叉树C模板类.我遇到了一些奇怪的编译器错误,我不了解子类和指向模板的指针.我发现了一些hacky工作,但我想知道是否有人可以解释为什么我的代码不能编译… 我在Linux上,用scons构建,使用g 我的代码看起来像这样,我有一个模板类来描
在疯狂的时刻,我决定写一个四叉树C模板类.我遇到了一些奇怪的编译器错误,我不了解子类和指向模板的指针.我发现了一些hacky工作,但我想知道是否有人可以解释为什么我的代码不能编译…
我在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; } 当我编译时,我得到这个错误:期望’;’在’它’和预期之前’;’在’endit’之前. template <class value_type> Leaf * QuadTree< value_type >::Insert ( const value_type & _x ) // <-- bad { // Insert stuff... } 我得到编译错误:期望构造函数,析构函数或’*’标记之前的类型转换 任何人都知道我为什么会收到这些错误?我已经解决了这些问题,但我想知道为什么我不能这样做. PS.我编辑了代码来显示它,所以有可能我错过了一些我认为完全无关紧要的东西. 编辑.固定四叉树 – > QuadTree错字 解决方法
你需要
typename std::set< Leaf* >::iterator it = m_leaves.begin(); typename std::set< Leaf* >::iterator endit = m_leaves.end(); std :: set的类型取决于另一个模板参数,你必须告诉编译器这实际上是一个类型. gcc 4.5.0产生更好的错误消息. 第二个错误类似: template <class value_type> typename QuadTree<value_type>::Leaf* QuadTree< value_type >::Insert ( const value_type & _x ) { // Insert stuff... } Leaf是QuadTree的内部类.您需要将其命名为此类,并且您需要指定QuadTree的类型,因为内部类依赖于模板参数. 另一件事:你在很多地方都有QuadTree的拼写错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |