返回模板化结构对象指针时出现问题
Having trouble returning a templated struct object pointer
我正在编写类中的所有方法原型,它们的定义将在它之外
template <class type>
class avlTree : public binarySearchTree<type>
{
public:
avlTree(); //default constructor
~avlTree(); //destructor
const type & findMin() const;
const type & findMax() const;
bool isEmpty() const;
void printTree() const;
void makeEmpty();
void insert(const type & newData);
void remove(const type & deleteItem);
private:
template<class type>
struct avlNode
{
type info;
avlNode *left;
avlNode *right;
int height;
avlNode(const type & data, avlNode *ll, avlNode *rl, int h = 0)
: info{ data }, left{ ll }, right{ rl }, height{ h } {}
};
avlNode<type> * root;
void insert(const type & newData, avlNode<type> * & p);
void remove(const type & deleteItem, avlNode<type> * & p);
avlNode<type>* findMin(avlNode<type> * p); //these two methods are where I'm having problems.
avlNode<type>* findMax(avlNode<type> * p);
};
我在编写内部(专用)findMin()
和findMax()
定义时遇到问题。为了增加清晰度,不是实际的算法,而是返回avlNode对象指针的语法。类中的原型没有显示错误,但当我尝试在类外编写其定义时,Intellisense不会显示,并且当我尝试对p->member
进行编码时,本地p指针也不会显示其成员。通常Intellsense会显示带有其成员的下拉菜单,但它没有显示。所以我知道存在某种语法错误。我想这可能与模板的设置方式有关,但我不确定。那么我做错了什么?
我的方法定义遇到问题:
template <class type>
typename avlTree<type>::avlNode* avlTree<type>::findMin(avlNode * p)
{
if (p == nullptr)
return nullptr;
if (p->left == nullptr) //when I hover over 'p->left' that's when Intellisense says '<unknown> avlTree<type>::avlNode::left'
return p;
return findMin(p->left); //same thing here
}
这应该做到:
template <typename type>
avlTree<type>::avlNode<type>*
avlTree<type>::findMin(avlNode<type>* p) {
// ...
}
如果您还没有意识到这一点,则不需要将avlNode
本身作为模板。您启用了不必要的灵活性,因此avlTree<int>::avlNode<long>
是一种东西,但从未真正利用过所述灵活性。使avlNode
成为一个普通的非模板成员类,这将大大简化问题。
相关文章:
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)