2011-06-15 79 views
1

我正在使用C语言编写的库,并且该库提供了仅使用void *的头文件。该库用于创建一种图形,该图形存储在C数据库中。标题返回void *到图中的节点。为了创建图,我需要解析一堆让我们说节点名称。与堆栈节点名称并行,我需要为节点维护一个堆栈void *。我有这样的事情:如何在堆栈中存储void * C++容器

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大小ATLEAST 2.我将不胜感激任何建议,以克服这种错误..

回答

6

std::stack::pop()没有按” t返回删除的元素。在弹出之前,您必须先阅读top()

+4

通过解释 - 因为这是一个C++怪癖 - 这是为了允许编写异常安全的代码。写在这个问题上的很多,例如http://www.gotw.ca/gotw/008.htm – 2011-06-15 03:41:25

1

两件事情

A)您忘记;的nodeStack.pop后()。

B).pop()返回void这就是为什么你会得到错误。 .pop()只是从堆栈中删除元素。使用.top()获取元素,然后使用.pop()将其删除。