Как хранить void * в стеке c ++ контейнера - PullRequest
1 голос
/ 15 июня 2011

Я использую библиотеку, написанную на C, и библиотека предоставляет заголовки, которые используют только void *.Библиотека используется для создания своего рода графика, который хранится в базе данных Си.Заголовки возвращают 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 ]

6 голосов
/ 15 июня 2011

std::stack::pop() не возвращает удаленный элемент. Вы должны прочитать его с помощью top(), прежде чем всплыть.

1 голос
/ 15 июня 2011

2 Вещи

A) вы забыли; это после nodeStack.pop ().

B) .pop () возвращает void, поэтому вы получаете ошибку..pop () просто удаляет элемент из стека.Используйте .top (), чтобы получить элемент, затем .pop (), чтобы удалить его.

0 голосов
/ 15 июня 2011

Прототип для stack :: pop равен

void pop ( );

Поэтому он не возвращает ничего, следовательно, предупреждение.Возможно, вы хотели использовать stack :: top

...