我如何在私人课堂上访问功能?

时间:2015-04-04 08:11:42

标签: c++

template<typename DataType>
class AVLTree
{
    public:

    private:
        class AVLNode
        {
        public:
            DataType data;
            int balanceFactor;
            AVLNode *left;
            AVLNode *right;
            AVLNode():balanceFactor(0),left(NULL),right(NULL){}
            AVLNode(DataType item):balanceFactor(0), data(item),left(NULL), right(NULL){}
        };
        typedef AVLNode* AVLNodePointer;
        AVLNodePointer root;
        int height(AVLTree<DataType>::AVLNodePointer temp);
        int different(AVLTree<DataType>::AVLNodePointer temp);
        AVLNodePointer ll_rotation(AVLTree<DataType>::AVLNodePointer parent);

};

template<typename DataType>
AVLNodePointer AVLTree<DataType>:: ll_rotation(AVLTree<DataType>::AVLNodePointer parent)
{
}

但是这个声明给出了编译器错误。如何在课外声明此功能?只需编辑一些输入错误但仍有错误

1 个答案:

答案 0 :(得分:0)

template<typename DataType>
typename AVLTree<DataType>::AVLNodePointer AVLTree<DataType>::ll_rotation(AVLTree<DataType>::AVLNodePointer parent)
{
}

AVLNodePointer类型仅在AVLTree<DataType>类中定义,因此需要前缀。

类型AVLTree<DataType>::AVLNodePointer被称为“依赖名称”,因为它依赖于类AVLTree<DataType>的实例化。

每次使用从属名称时,

Section 14.6 C ++标准都要求使用typename关键字。

  

模板声明或定义中使用的名称,即   取决于模板参数,假定不命名类型,除非   适用的名称查找查找类型名称或名称是合格的   通过关键字typename。