微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在堆栈c ++容器中存储void *

如何解决如何在堆栈c ++容器中存储void *

| 我正在使用用C编写的库,该库提供的标头仅使用void *。该库用于创建一种图形,该图形存储在C数据库中。标头将void *返回到图中的节点。要创建图,我需要解析一堆可以说的节点名称。与节点名称的堆栈并行,我需要为节点维护一个堆栈void *。我有这样的事情:
std::stack < void* > nodeStack;   
while (!nodeNameStack.empty()) {  
   // check if nodeNamestack.front() meets some criteria 
   nodeStack.push(C_API_To_Create_Node(nodeNameStack.pop()));

   // Do some processing  
   // check if nodeStack.size() >= 2  
   void *node1 = nodeStack.pop()  
   void *node2 = nodeStack.pop()  
   // Above line issues error saying void value not ignored as it ought to be.. 
我不确定是什么问题,因为我们保证nodeStack的大小至少为2。对于克服此错误的任何建议,我们将不胜感激。     

解决方法

        
std::stack::pop()
不会返回删除的元素。弹出之前,您必须先用
top()
进行阅读。     ,        2件事 A)您忘记了nodeStack.pop()之后的; \。 B).pop()返回void,这就是您收到错误的原因。 .pop()只是从堆栈中删除元素。使用.top()获取元素,然后使用.pop()删除元素。     ,        stack :: pop的原型是
void pop ( );
因此,它不会返回任何警告信息。也许您打算使用stack :: top     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。