2011-06-15 69 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()將其刪除。