代码修改如下:
标头.h文件:
#pragma once
#include <iostream>
#define MAXSIZE 20
using namespace std;
class stack
{
public:
stack();
//~stack();
void clearstack(); //清空
int isempty(); //判空
int length(); //求长度
char gettop(); //取栈顶元素
int push(int); //进栈
int pop(); //出栈
int traverse(); //遍历
//增加sum函数的声明
int sum();
protected:
int* base; //栈底指针
int* top; //栈顶指针
int stacksize; //
};
源1.cpp文件:
#include "标头.h"
stack::stack()
{
base = new int[MAXSIZE];
top = base;
stacksize = MAXSIZE;
}
void stack::clearstack()
{
top = base;
return;
}
int stack::isempty()
{
if (top == base)
{
cout << "栈为空!" << endl;
return 0;
}
else
{
cout << "栈不为空!" << endl;
return 1;
}
}
int stack::length()
{
return top - base;
}
int stack::push(int a)
{
if (top - base == stacksize)
{
cout << "栈已满!" << endl;
return 0;
}
*top = a;
top++;
return 1;
}
int stack::pop()
{
int s = 0;
if (top == base)
{
cout << "栈为空!" << endl;
return 0;
}
s = *(top - 1);
top--;
return s;
}
char stack::gettop()
{
return *(top - 1);
}
int stack::traverse()
{
int* s = top;
while (s != base)
{
cout << *(s - 1) << endl;
s--;
}
if (s == base) cout << endl;
return 1;
}
int stack::sum()
{
int sum = 0;
for (int i = 0; i < length(); i++)
{
sum += base[i];
}
return sum;
}
源.cpp文件:
#include <iostream>
#include "标头.h"
#include <stdio.h>
using namespace std;
int main()
{
stack OPTR, OPND;
string str;
int sum = 0;
cin >> str;
int lens = str.size();
char code = '+';
for (int i = 0; i < lens; i++)
{
char val = str[i];
if (val == ' ')
{
continue;
}
if (val >= '0' && val <= '9')
{
int num = 0;
char val2 = 0;
while (i < lens ) //修改
{
val2 = str[i];
if (val2 >= '0' && val2 <= '9')
{
num = num * 10 + val2 - '0';
i++;
}
else
{
break;
}
}
switch (code) {
case '+':
OPND.push(num);
break;
case '-':
OPND.push(-num);
break;
case '*':
OPND.push(OPND.pop() * num);
break;
case '/':
OPND.push(OPND.pop() / num);
break;
}
}
else {
code = str[i]; //修改
}
}
sum = OPND.sum();
cout << sum;
system("pause");
return 0;
}
你push()的参数和pop()返回值类型定义是char
但是你传递的push()参数和pop()实际返回值却是int类型