Salve, sto facendo questo programma sulla rappresentazione di grafi tramite liste di adicaenza.

Volevo implementare 2 classi, una per la gestione del nodo del grafo , l'altra per la gestione delle liste... ma mi da degli errori.
Uso visual c++.

ecco il codice lasciate perdere le cose in più:

#include <iostream>
#include <time.h>

#define SIZE 50//size del grafo=numero dei vertici

#include <string>//L'utilizzo di stringhe richiede l'inclusione dell'header string
#include <queue>

using namespace std;

class lista
{
private:
lista *pnext;
grafo *nodo;//qui da l'errore ma mi serve in questa
// classe un puntatore all'altra classe
int peso;
public:

lista(grafo **N, int pes)
{
nodo=N;
peso=pes;
p_next=NULL;
}

};



class grafo
{
private:


int vert; //nodo del grafo
//int peso; //peso attribuito all'arco
lista *next; //puntatore al nodo successivo nella lista di adiacenza di v
string color; //colore del nodo v (utilizzato per la BFS-Visit)
grafo *p; //predecessore del nodo v (utilizzato per la BFS-Visit)
int d; //distanza del nodo v dal vertice sorgente(utilizzato per la BFS-Visit)
int f;

public:

//Realizzo il costruttore per l'inizializzazione dei dati membro
grafo (int v)
{
vert=v;

next=NULL;
}
//int getv() { return vert;}
//void setpeso(int pes) { peso=pes;}
//void setnext(grafo *n) { next=n;}


void insert(grafo **N)
{


lista *p=this->next;
int pes=rand()%100;
lista *nuovo=new lista(N,pes);
while(p!=NULL)
p=p->next;
p=nuovo;
}
};


Sarei grato se qualcuno mi desse un suggerimento.
Grazie.