用手写算法 2022-04-25 09:38 采纳率: 62.5%
浏览 43

关于不可解析外部符号

img

img

img

img

我在讲push的形参类型改为int后也还是不行,还是这几个错误,想知道这几个错误怎么改

img

img

  • 写回答

2条回答 默认 最新

  • 关注

    你的代码中,标头.h文件中,没有声明sum函数,在stack类中添加sum函数的声明,如下:

    int sum(); //在标头.h文件的stack类中

    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;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?