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

How to store void* in a stack c++ container

本文关键字:存储 void 堆栈 c++      更新时间:2023-10-16

我使用的是一个用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().之后的s

B) pop()返回void,这就是您得到错误的原因。pop()只是从堆栈中删除元素。使用.top()获取元素,然后使用.pop()删除它。

stack::pop的原型是

void pop ( );

因此,它不会返回任何因此发出警告的内容。也许您打算使用stack::top