关于一些报错,想知道怎么解决。

img

img


img

img

img

img

img

img


我想问一下这几个错误是什么情况啊,我程序本身应该没有问题,之前有一个思路,改了一个思路,想问一下怎么解决这些错误。

代码修改如下:
标头.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类型

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632