#include <stack>
using namespace std;
int main() {
stack<int> s;
int i;
for (i = 0; i <= 10; i++) {
s.push(i);
}
for (i = 0; i <= 10; i++) {
printf("%d", s.pop());
}
}
Что случилось с кодом выше?
Ошибка:
В функции
int main()
: итоговое значение использовало, где целое число ожидалось
stack :: pop
- это функция void
, которая просто отбрасывает верхний элемент в стеке, чтобы получить значение, которое вы хотите использовать stack :: top
.
Причина в соображениях безопасности исключений (что произойдет, если возвращенный объект вызовет исключение в своем конструкторе копирования?).
Незначительная придирка, ваш цикл for на самом деле кодирует 11 элементов, а не 10, как вы думаете, бегло взглянув на количество циклов. Подумайте об использовании <11, если вы имеете в виду 11 элементов для добавления.
Вы обрабатываете pop (), который является операцией для вывода на стандартный вывод. pop () просто удаляет самый верхний элемент из стека. Однако самая запутанная вещь - это ваши отладочные данные.
Я скомпилировал ваш фрагмент кода с помощью стандартного компилятора GNU C ++ , который дал мне:
main.cpp | 12 | ошибка: недопустимое использование выражения void
int main() {
stack<int> s;
int i;
for (i = 0; i <= 10; i++) {
s.push(i);
}
for (i = 0; i <= 10; i++) {
printf("%i", s.top());
s.pop();
}
}