一直提示未定义标识符equals

#include<iostream>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW  -2
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 5

typedef int ElemType;
typedef int Status;
typedef struct {
    ElemType* elem;
    int length;
    int listsize;
}SqList;
Status InitList_Sq(SqList& L) {

    L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if (!L.elem) exit(OVERFLOW);
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
    return OK;

}
Status ListInsert_Sq(SqList& L, int i, ElemType e) {
    ElemType* newbase, * p, * q;
    if (i<1 || i>L.length + 1) return ERROR;
    if (L.length >= L.listsize) {
        newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
        if (!newbase) exit(OVERFLOW);
        L.elem = newbase;
        L.listsize += LISTINCREMENT;
    }
    q = &(L.elem[i - 1]);
    for (p = &(L.elem[L.length - 1]); p >= q; --p) *(p + 1) = *p;
    *q = e;
    ++L.length;
    return OK;
}
void showList(SqList L) {
    for (int i = 0; i < L.length; i++) {
        printf("&d\t", L.elem[i]);

    }
}
Status GetElem(SqList L, int i, ElemType& e) {
    if (i<1 || i> L.length) return ERROR;
    //e=*(L.elem+i-1);
    e = L.elem[i - 1];
    return OK;

}

int LocateElem_Sq(SqList L, ElemType& e, Status(*compare) (ElemType x, ElemType y)) {
    int i = 1;
    ElemType* p;
    p = L.elem;
    while (i <= L.length && !(*compare)(*p++, e)) ++i;
    if (i <= L.length) return i;
    else return 0;

}//LocateElem_Sq

void MergeList(SqList& L1, SqList L2) {
    ElemType e;

    int L1_len = L1.length;
    int L2_len = L2.length;
    for (int i = 1; i <= L2_len; i++) {
        GetElem(L2, i, e);
        if (!LocateElem_Sq(L1, e , equals ))
            ListInsert_Sq(L1, ++L1_len, e);
    }

}
void main() {
    SqList L1, L2;
    InitList_Sq(L1);
    InitList_Sq(L2);
    int i = 1;

    while (i) {
        cout << "输入插入L1线性表元素的位置,输入0结束" << endl;
        cin >> i;
        if (i == 0) { break; }
        cout << "输入插入L1线性表元素" << endl;
        ElemType e;
        cin >> e;
        ListInsert_Sq(L1, i, e);
    }
    showList(L1);
    cout << "\n";
    i = 1;

    while (i) {
        cout << "输入插入L2线性表元素的位置,输入0结束" << endl;
        cin >> i;
        if (i == 0) { break; }
        cout << "输入插入L2线性表元素" << endl;
        ElemType e;
        cin >> e;
        ListInsert_Sq(L2, i, e);
    }
    showList(L2);
    cout << "\n";
    MergeList(L1, L2);
    showList(L1);
}

equals确实没定义呀