为什么我不能将从我的 BST 获取的这个节点推送到这个堆栈中?
Why can't I push this node that takes from my BST into this stack?
它的结构如何 .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);
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 为什么我的删除节点函数实际上没有删除节点?
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 我们可以删除链表中静态内存中的节点吗
- 如何在pugixml中获取节点的内部XML
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- 为什么我不能将从我的 BST 获取的这个节点推送到这个堆栈中?
- C 在堆栈上对对象(节点)做出一系列指针
- C++为什么创建一个新节点来删除堆栈上的节点是错误的
- 当我使用节点调用C 时,如何更改堆栈储备大小
- 如何在C++中将文件路径作为节点添加到树或堆栈中
- 在C/ c++中,链表只有头指针分配在堆栈中,其他节点分配在堆中.这可能导致内存泄漏
- 错误 C2079:"堆栈命名空间::堆栈节点:<T>:值"使用未定义的类