C++ односвязные списки. программный код. не могу устранить ошибку «x: необъявленный идентификатор»

c++ односвязные списки. программный код. не могу устранить ошибку "x: необъявленный идентификатор"
#include
#include
using namespace std;
struct Data{
int a;
};
struct List{
Data d;
List *next;
};
List *u = NULL;
void Print(List *u){
List *p = u;
cout < < "Spisok:" << endl;
while(p){
cout < < p->d.a < < endl;
p = p->next;
}
}
void Add_Beg(List **u, Data &x){
List *t = new List;
t->d.a = x.a;
t->next = *u;
*u = t;
}
void Insert(List **u, Data &x){
// вставка в список одного элемента перед элементом,
// меньшим или равным данному x
List *p = new List;
p->d.a = x.a;

if(*u == 0) // исходный список пуст - вставка в начало
{
p->next = 0;
*u = p;
return;
}

List *t = *u;
if(t->d.a >= p->d.a) // исходный список не пуст -
// вставка в начало
{
p->next = t;
*u = p;
return;
}

List *t1 = t->next;
while(t1)
{
if(t->d.a < p->d.a && p->d.a < = t1->d.a)
{ // вставка в середину
t->next = p;
p->next = t1;
return;
}
t = t1;
t1 = t1->next;
}

t->next = p; // добавляем в конец списка
p->next = 0;
}
void Delete(List **u, Data &x)
{
if(*u == 0) // исходный список пуст - удалять нечего!
{
return;
}
List *t = *u;
if(t->d.a == x.a) // исходный список не пуст -
// удаляется начало
{
*u = t->next;
delete t;
return;
}
List *t1 = t->next;
while(t1)
{
if(t1->d.a == x.a)
// исходный список не пуст -
//удаляется не первый элемент
{
t->next = t1->next;
delete t1;
return;
}
t = t1;
t1 = t1->next;
}
}

void Clear(List **u)
{
// удаление (очистка) всего списка
if(*u == 0) return;
List *p = *u;
List *t;
while(p)
{
t = p;
p = p->next;
delete t;
}
*u = 0;
}

void menu(){
char men;
cout< <"Меню"<>men;
cout< d.a = 3; // Заполняем поля с данными
// (здесь это всего одно поле)
u->next = NULL;
List *x;
x = u; // Сейчас последний элемент списка совпадает с его началом
x->next = new List;
x = x->next;
x->d.a = 5;
x->next = NULL;

menu();

system ("pause");

}

  • Выложите на pastebin.com
    Ссылку - сюда.
    Номер с строки с ошибкой - тоже.