Problema con programa en C++

Ismaelichio
08 de Enero del 2009
Hola!

Tengo que realizar un ejercicio en el que se me pide hacer una busqueda por amplitud de un grafo y he hecho el siguiente programa:

#include <string.h> // Esto es para la funcion memset
#include <iostream>
using namespace std;

#define MAX_NODOS 26

///////////////////////////////////////////////////////////
////////// VARIABLES GLOBALES ///////////////
///////////////////////////////////////////////////////////

int nnodos; // Numero de nodos del grafo
int naristas; // Numero de aristas del grafo
bool G[MAX_NODOS][MAX_NODOS]; // Matriz de adyacencia
bool visitado[MAX_NODOS]; // Marcas de nodos visitados
struct nodo {
int info;
struct nodo *sig;
};
struct cola {
struct nodo *pri;
struct nodo *ult;
int n;
};

///////////////////////////////////////////////////////////
////////// FUNCIONES DEL PROGRAMA ///////////////
///////////////////////////////////////////////////////////

void leeGrafo (void)
// Procedimiento para leer un grafo de la entrada
{
cin >> nnodos >> naristas;
if (nnodos<0 || nnodos>MAX_NODOS) {
cerr << "Numero de nodos (" << nnodos << ") no validon";
exit(0);
}
memset(G, 0, sizeof(G));
char c1, c2;
for (int i= 0; i<naristas; i++) {
cin >> c1 >> c2;
G[c1-'A'][c2-'A']= true;
}
};

bool esVacia (struct cola c) {
return (c.n=0);
};
void crearCola (struct cola c) {
c.n=0;
c.pri= NULL;
c.ult= NULL;
};

void insertarCola (int x , struct cola c)
{
struct nodo *p;
p=(struct nodo *)malloc(sizeof(struct nodo));
(*p).info = x;
if (esVacia(c)) {
c.pri=p;
c.ult=p;
c.n=1;
}
else {
(c.*ult).sig=p; /***/
c.ult=p;
c.n++;
};
};

void suprimirCola (struct cola c)
{
if (!esVacia(c)) {
struct nodo *p;
p= c.pri;
c.pri= (c.*pri).sig; /***/
delete (p);
c.n--;
};
};

int frenteCola (struct cola c)
{
return (c.*pri).info; /***/
};

void bpa (int v)
{
int x;
struct cola c;
crearCola(c);
visitado[v]=true;
cout << char(v+'A');
insertarCola(v, c);
while (c.n !=0) {
x=frenteCola(c);
suprimirCola(c);
for (int y= 0; y<nnodos; y++){
if (!visitado[y] && G[x][y]){
visitado[y]= true;
insertarCola(y, c);
};
};
};
cout << endl;
};

void busquedaPA (void)
// Procedimiento principal de la busqueda en profundidad
{
memset(visitado, 0, sizeof(visitado));
for (int v=0 ; v<nnodos ; v++){
if (!visitado[v]){
bpa(v);
};
cout << endl;
};
};

int main (void)
{
int ncasos;
cin >> ncasos;
for (int i= 0; i<ncasos; i++) {
leeGrafo();
busquedaPA();
};
};


Pues bien, el problema está en que me da un error en las líneas con /***/, diciendo que tanto pri como ult "no se declararon en este ámbito". ¿Por qué puede ser? Muchas gracias de antemano.