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

时间:2011-06-15 03:12:36

标签: c++ stack void-pointers

我正在使用用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.我会很感激任何克服此错误的建议..

3 个答案:

答案 0 :(得分:6)

std::stack::pop()不会返回已删除的元素。在弹出它之前,你必须用top()阅读它。

答案 1 :(得分:1)

2件事

A)你忘了;在nodeStack.pop()之后。

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

答案 2 :(得分:0)

stack::pop的原型是

void pop ( );

因此它不会返回任何警告。也许您打算使用stack::top