多个模板参数继承c ++

时间:2016-05-02 19:31:02

标签: c++ templates

我想实现一个继承自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行

我已经苦苦挣扎了两个星期,但我失败了!

0 个答案:

没有答案