Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';我不能将这个从BST获取的节点推到这个堆栈中吗?_C++_Stack_Binary Search Tree - Fatal编程技术网

C++ 为什么可以';我不能将这个从BST获取的节点推到这个堆栈中吗?

C++ 为什么可以';我不能将这个从BST获取的节点推到这个堆栈中吗?,c++,stack,binary-search-tree,C++,Stack,Binary Search Tree,它的结构如何。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.

它的结构如何。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 BST::inorderTraversal()常量{
堆叠iterStack;
节点*当前节点=根;
iterStack->push(当前节点);
}
出现错误:

“std::stack*,std::deque>”没有 有一个重载的成员“operator->”

'std::stack*,std::deque>::push': 左操作数具有“类”类型,请使用“.”


当有疑问时,在头中替换模板参数并考虑结果代码。例如,如果此处的

T
Packet
,则:

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

除此之外,您的堆栈一开始可能不需要自身是动态的

std::stack< Node<T>* > stk;
Node <T> *currentNode = root;
stk.push(currentNode);
std::stackstk;
节点*当前节点=根;
stk.push(当前节点);

清楚地
堆叠*iterStack(一个不确定的指针),后跟
iterStack->push(当前节点)无论如何都不起作用。但是如果您是
std::stack
需要按住
Node*
而不是
T
,那么。。。那样做?你是说像这样的“堆叠铁钉”吗?我试过了。它不起作用。我有错误,请查看我的更新。我不确定如何配置它,以便将其放入堆栈中。知道吗?你的更新现在使用了错误的成员访问操作符。它应该是
iterStack.push(currentNode)(请注意点而不是箭头)。我很抱歉不得不这么说,但在尝试这种复杂的项目之前,您必须更牢固地掌握该语言的基础知识。我建议把链表作为一个很好的入门练习。@Beta,我已经做了链表。我实际上还没有使用C++在超过2年左右?我正在努力复习,这是为了学校的目的。除此之外,我很少处理模板!
template <typename T>
void BST<T>::inorderTraversal() const{
    stack <Node<T> *> iterStack;
    Node <T> *currentNode = root;
    iterStack->push(currentNode);
}
std::stack<T> *iterStack;
Node <T> *currentNode = root;
iterStack->push(currentNode);
std::stack<Packet> *iterStack;
Node <Packet> *currentNode = root;
iterStack->push(currentNode);
std::stack< Node<T> > *iterStack;
Node <T> *currentNode = root;
iterStack->push(currentNode);
std::stack< Node<T>* > stk;
Node <T> *currentNode = root;
stk.push(currentNode);