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)
{
}
但是这个声明给出了编译器错误。如何在课外声明此功能?只需编辑一些输入错误但仍有错误
答案 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。