我想实现一个继承自BinaryTree类的BinaryIndexedTree模板类。我的BinaryTree类是一个带有两个参数的模板,还有一个嵌套类,如下所示:
二叉树:
#pragma once
#include <queue>
#include "InternalBinaryTreeNode.h"
using namespace std;
template <class T, class IBTN = InternalBinaryTreeNode<T>>
class BinaryTree{
public:
class BinaryTreeNode
{
public:
virtual ~BinaryTreeNode(void){}
//...
protected:
friend class BinaryTree<T>;
BinaryTreeNode(IBTN* node){
mActualNode = node;
}
IBTN *mActualNode;
};
private:
IBTN* mRevInEnd;
IBTN* mRevPostEnd;
IBTN* mInEnd;
IBTN* mRevPreEnd;
IBTN* mPreEnd;
IBTN* mPostEnd;
int mNodeDisplayWidth;
public:
BinaryTree(void)
{
mNodeDisplayWidth = 6;
mRevInEnd = new IBTN();
mRevPostEnd = new IBTN();
mInEnd = new IBTN();
mRevPreEnd = mInEnd;
mPreEnd = new IBTN();
mPostEnd = mPreEnd;
mRevPostEnd->mLeftChild = 0;
mRevPostEnd->mRightChild = 0;
mRevPostEnd->mParent = mRevInEnd;
mRevInEnd->mLeftChild = mRevPostEnd;
mRevInEnd->mRightChild = mInEnd;
mRevInEnd->mParent = 0;
mInEnd->mLeftChild = 0;
mInEnd->mRightChild = mPreEnd;
mInEnd->mParent = mRevInEnd;
mPreEnd->mLeftChild = 0;
mPreEnd->mRightChild = 0;
mPreEnd->mParent = mInEnd;
}
virtual ~BinaryTree(void){
//...
}
};
IBTN(InternalBinaryTreeNode)是我的内部节点,用户不需要使用它,我从IBTN继承InternalIndexedBinaryTreeNode并添加int
字段:
InternalBinaryTreeNode:
#pragma once
template <class T, class IBTN>
class BinaryTree;
template <class T>
class InternalBinaryTreeNode
{
public:
InternalBinaryTreeNode(void)
{
mLeftChild = 0;
mRightChild = 0;
}
virtual ~InternalBinaryTreeNode(void)
{
}
friend class BinaryTree<T, InternalBinaryTreeNode<T>>;
protected:
T mData;
InternalBinaryTreeNode<T>* mParent;
InternalBinaryTreeNode<T>* mLeftChild;
InternalBinaryTreeNode<T>* mRightChild;
// used for drawing
int mPosition; // Position in the level of tree
};
这是我的 InternalIndexedBinaryTreeNode :
#include "InternalBinaryTreeNode.h"
template<class T>
class InternalIndexedBinaryTreeNode:public InternalBinaryTreeNode<T>{
public:
InternalIndexedBinaryTreeNode(){
leftSize=0;
}
~InternalIndexedBinaryTreeNode(){
}
virtual int getLeftSize(){
return leftSize;
}
friend class IndexedBinaryTree<T,InternalIndexedBinaryTreeNode<T>>;
protected:
int leftSize;
};
当我像这样实现我的IndexedBinaryTreeNode时:
#include "BinaryTree.h"
#include "InternalIndexedBinaryTreeNode.h"
template<class T,class IBTN = InternalIndexedBinaryTreeNode<T>>
class IndexedBinaryTree:public BinaryTree<T,IBTN>{
public:
IndexedBinaryTree(){
}
public:
class BinaryIndexedTreeNode:public BinaryTree<T,IBTN>::BinaryTreeNode{
friend class IndexedBinaryTree<T,InternalIndexedBinaryTreeNode<T>>;
};
};
我收到此错误:
1错误C2059:语法错误:'&lt;' internalindexedbinarytreenode.h第19行
2错误C2238:';'之前的意外令牌 internalindexedbinarytreenode.h第19行
3错误C2989:'IndexedBinaryTree':类模板已经存在 声明为非类模板indexedbinarytree.h Line24
4错误C3857:'IndexedBinaryTree':多个模板参数列表 不允许indexedbinarytree.h第5行
我已经苦苦挣扎了两个星期,但我失败了!