#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()
中:在预期整数时使用的聚合值
答案 0 :(得分:21)
stack::pop
是void
函数,它只丢弃堆栈中的顶部元素,以获取您要使用的值stack::top
。
这是exception safety reasons的原因(如果返回的对象在其复制构造函数中抛出异常,会发生什么?)。
答案 1 :(得分:2)
轻微的挑剔,你的for循环实际上编码了11个项目而不是10个,就像你从简短的循环计数一样思考。考虑使用&lt; 11如果你的意思是要添加11个元素。
答案 2 :(得分:1)
您正在处理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();
}
}