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

cpp*_*der 1 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.. 
Run Code Online (Sandbox Code Playgroud)

我不确定是什么问题,因为我们保证nodeStack大小至少为2.我会很感激任何克服此错误的建议.

Ben*_*igt 6

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

  • 通过解释 - 因为这是一个C++的怪癖 - 这样做是为了允许编写异常安全的代码.很多关于这个问题的文章,例如http://www.gotw.ca/gotw/008.htm (4认同)