C2100非法的间接寻址问题求解

倒数11和倒数17行出错

#include<iostream>
using namespace std;
#define SElemType student

#define Maxsize 100
typedef struct
{
    int id;
    int gender;
    string name;
    int age;
}student;
typedef struct
{
    SElemType* base;//栈底指针
    SElemType* top;//栈顶指针
    int stacksize;//栈可用的最大容量
}SqStack;
int InitStack(SqStack& S)
{
    //构造一个空栈
    S.base = new SElemType[Maxsize];//为顺序栈动态分配一个最大容量为Maxsize的数组空间
    if (!S.base)
        exit(OVERFLOW);//存储分配失败
    S.top = S.base;//栈顶指针等于栈底指针
    S.stacksize = Maxsize;
    return 0;
}
//顺序栈的入栈
bool Push(SqStack* S, SElemType *e)
{
    if (S->top - S->base == Maxsize)
        return false;//栈满
    S->top->id = e->id;
    S->top->age = e->age;
    S->top->gender = e->gender;
    S->top->name = e->name;
    S->top++;
    return true;
}
//2、出栈
SElemType PopSqStack(SqStack* s)
{
    if (s->top == s->base)
        cout << "erroe\n" << endl;
    else
    {
        cout << "OK\n" << endl;
        return *(s->top - 1);
    }
}

//菜单
void menu()
{
    cout << "***************************************************************************" << endl;
    cout << "***********************************1、入栈*********************************" << endl;
    cout << "***********************************2、出栈*********************************" << endl;
    cout << "***********************************0、退出*********************************" << endl;
    cout << "***************************************************************************" << endl;
}
int main()
{
    int choice;
    int length;
    student a;
    SElemType* b=new SElemType;
    SqStack S;
    InitStack(S);
    void menu();
    cout << "输入选择" << endl;
    cin >> choice;
    switch (choice)
    {
        case 1:
        {
            cout << "输入入栈的个数" << endl;
            cin >> length;
            for (int i = 1; i <= length; i++)
            {
                cout << "输入第" << i << "个id,age,name,gender" << endl;
                cin >> a.id >> a.age >> a.name >> a.gender;
                Push(*S, a);                                                //这错了
            }
            break;
        }
        case 2:
        {
            b = PopSqStack(*S);                                                    //这也错了
            cout << b->name << " " << b->age << " " << b->gender << " " << b->id << " " << endl;
            break;
        }
        default:
            cout << "菜单序号输入有误!" << endl;
            system("pause");
            break;
    }
    return 0;
}