为什么我不能将从我的 BST 获取的这个节点推送到这个堆栈中?

Why can't I push this node that takes from my BST into this stack?

本文关键字:节点 堆栈 不能 我的 获取 BST 为什么      更新时间:2023-10-16

它的结构如何 .h:

template <typename T>
class Node {
    template <typename> friend class BST;
    public:
        Node(T p) : data(p), rlink(nullptr), llink(nullptr) {}
        ~Node() {}
    private:
        T data; // The holder of PACKET.
        Node *rlink, *llink;
};
template <typename T>
class BST {
public:
    BST();
    void insert(T &p);
    void inorderTraversal() const;
private:
    Node<T> * root; 
};

这是我将使用的可疑函数以及出现问题的位置:

void inorderTraversal() const{
    stack <T> *iterStack;
    Node <T> *currentNode = root;
    iterStack->push(currentNode);
}

错误:

'void std::stack>>::p ush(const 数据包 &(':无法将参数 1 从"节点 *"转换为"数据包 &&">

如何解决此问题,以便堆栈可以接收我的节点?

请注意,数据包是被 Node 的私有成员 T data 接收的对象。

Packet.h (供参考(:

class Packet {
public:
    Packet(int partId, string description, double price, int partCount) :
        partId(partId), description(description), price(price), partCount(partCount) {}
    int getPartId() const { return partId; }
    string getDescription() const { return description; }
    double getPrice() const { return price; }
    int getPartCount() const { return partCount; }
private:
    int partId;
    string description;
    double price;
    int partCount;
};

更新:

template <typename T>
void BST<T>::inorderTraversal() const{
    stack <Node<T> *> iterStack;
    Node <T> *currentNode = root;
    iterStack->push(currentNode);
}

出现错误:

'std::stack *,std::d eque<_Ty,std::分配器<_Ty>>>"不 有一个重载成员"运算符 ->"

'std::stack *,std::d eque<_Ty,std::allocator<_Ty>>>::p ush': 左操作数具有"类"类型,使用".">

如有疑问,请替换脑海中的模板参数并考虑生成的代码。例如,如果要T在这里为您的目的Packet,那么这个:

std::stack<T> *iterStack;
Node <T> *currentNode = root;
iterStack->push(currentNode);

将是同义词

std::stack<Packet> *iterStack;
Node <Packet> *currentNode = root;
iterStack->push(currentNode);

显然,这段代码被删减了(只是因为显然你的代码是(,人们可以理智地质疑iterStack是否需要首先是动态的;看到它很可能不需要(。

无论如何,显然std::stack<Packet>不能容纳Node<Packet>*物体;但std::stack< Node<Packet>* >可以

std::stack< Node<T> > *iterStack;
Node <T> *currentNode = root;
iterStack->push(currentNode);

除此之外,您的堆栈可能首先不需要是动态的。

std::stack< Node<T>* > stk;
Node <T> *currentNode = root;
stk.push(currentNode);