关于不可解析外部符号

img

img

img

img

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

img

img

你的代码中,标头.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;
}

你定义的stack类与系统类同名了,更换类名。