|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Sep 2006
Messaggi: 207
|
[c++] problema irrisolvibile con i puntatori! chiedo aiuto!
qualcuno mi sa dire perchè questo codice non compila?
Codice:
#include "stdafx.h" #include <cstdlib> #include <iostream> #include <string> #include <stdio.h> #include <time.h> #include <map> #include <list> #include <algorithm> #include <iostream> using namespace std; //definiamo l'elemento nodo_rete, ovvero un generico elemento della rete di sensori typedef struct{ list<int> lista_nodi_adiacenti;//è una lista che contiene gli identificativi dei nodi adiacenti bool principale;//true indica che è il nodo principale, false indica che è un nodo secondario int identificativo;//identificativo del nodo di rete in questione int identificativo_nodo_seguente;//identificativo del successivo nodo cui passare un pacchetto int numero_passi; } nodo_rete; double p; //probabilità di morte di un nodo double q; //probabilità che un nodo ne generi un altro double xxx; //probabilità che un nodo generato si interconnetta con un altro qualsiasi nodo della rete int contatore_identificativi=1; //restituisce un numero random nell'intervallo [0,1) double random01(){ return ((double)rand() / ((double)(RAND_MAX)+(double)(1)) ); } void evolvi_rete(map<int,nodo_rete> *map){ //prima di tutto facciamo morire i nodi con probabilità p, e aggiorniamo la lista dei nodi adiacenti per tutti gli altri nodi cout<<"Morte dei nodi con probabilita' p="<<p<<"\n"<<endl; list<int> lista_nodi_da_eliminare; map<int, nodo_rete>::iterator it; //qui c'è l'errore for ( it=(*map).begin(); it!=(*map).end(); it++){ if(it->first.identificativo!=0 && random01()<=p){ lista_nodi_da_eliminare.insert(lista_nodi_da_eliminare.begin(),it->first); } } list<int>::iterator it1; for ( it1=lista_nodi_da_eliminare.begin(); it1!=lista_nodi_da_eliminare.end(); it1++){ (*map).erase(it1); } //adesso facciamo nascere, per ogni nodo esistente, un nuovo nodo con probabilità q cout<<"Nascita dei nodi con probabilita' q="<<q<<"\n"<<endl; for ( it=(*map).begin(); it!=(*map).end(); it++){ if(it->first!=0 && random01()<=q){ nodo_rete nodoFiglio; nodoFiglio.identificativo=contatore_identificativi; cout<<"E' nato un nodo con identificativo "<<contatore_identificativi<<" dal nodo padre "<<it->first<<endl; contatore_identificativi++; nodoFiglio.principale=false; nodoFiglio.lista_nodi_adiacenti.insert(nodoFiglio.lista_nodi_adiacenti.begin(),it->first); it->second.lista_nodi_adiacenti.insert(it->second.lista_nodi_adiacenti.begin(), contatore_identificativi -1); //facciamo legare il nodo creato agli altri nodi della rete con probabilità xxx map<int,nodo_rete>::iterator it2; for ( it2=(*map).begin(); it2!=(*map).end(); it2++){ if(random01()<=xxx && it2->first!=it->first){ nodoFiglio.lista_nodi_adiacenti.insert(nodoFiglio.lista_nodi_adiacenti.begin(),it2->first); it2->second.lista_nodi_adiacenti.insert(it2->second.lista_nodi_adiacenti.begin(),contatore_identificativi -1); } } } (*map).insert(pair<int,nodo_rete>(contatore_identificativi -1, nodoFiglio)); } //Applichiamo l'algoritmo di routing return; } int main(int argc, char *argv[]){ //impostiamo i valori di default delle probabilità p=0.3; q=0.6; xxx=0.1; //creiamo e inizializiamo la mappa che contiene i nodi che fanno parte della rete di sensori map<int,nodo_rete> mappa_nodi_rete; //creiamo il nodo principale e lo inseriamo in testa alla lista nodo_rete nodo_principale; nodo_principale.principale=true; nodo_principale.identificativo=0; nodo_principale.numero_passi=0; nodo_principale.identificativo_nodo_seguente=0; nodo_principale.lista_nodi_adiacenti.insert(nodo_principale.lista_nodi_adiacenti.begin(),0);//il nodo principale è adiacente a se stesso mappa_nodi_rete.insert(pair<int,nodo_rete>(0, nodo_principale)); //cout<< (lista_nodi_rete.getNumElementi()); srand( (unsigned)time(0) ); int scelta; do{ cout<<"Programma gestione rete di sensori\n\n1.Imposta probabilita' di nascita\n2.Imposta probabilita' di morte\n3.Fai evolvere la rete di sensori\n4.Fai partire pacchetto da un nodo\n5.Calcola percorso medio\n6.Esamina stato della rete"; cout<<"\n0.Esci\n"; cout<<"\n\nScelta:"; cin>>scelta; system("CLS"); switch(scelta){ case 1:{ double choose; do{ cout<<"Imposta la probabilita' di nascita q.\nIl valore attualmente impostato e' "<<q<<"\n\nN.B. La probabilita' deve avere un valore compreso tra 0 e 1.\n"<<endl; cin>>choose; system("CLS"); if(choose>1 || choose <0) cout<<"\aLa probabilita' deve essere compresa tra 0 e 1!\n\n\a"; else q=choose; }while(choose>1 || choose <0); } break; case 2:{ double choose; do{ cout<<"Imposta la probabilita' di morte p.\nIl valore attualmente impostato e' "<<p<<"\n\nN.B. La probabilita' deve avere un valore compreso tra 0 e 1.\n"<<endl; cin>>choose; system("CLS"); if(choose>1 || choose <0) cout<<"\aLa probabilita' deve essere compresa tra 0 e 1!\n\n\a"; else p=choose; }while(choose>1 || choose <0); } break; case 3:{ //evolvi_rete(&lista_nodi_rete); system("pause"); system("CLS"); } break; case 5:{ //percorso medio } break; case 6:{ system("CLS"); cout<<"La rete possiede attualmente le seguenti caratteristiche:\n"; cout<<"Probabilita' di nascita di un nodo: "<<q<<endl; cout<<"Probabilita' di morte di un nodo: "<<p<<endl; //cout<<"Sono presenti complessivamente "<<lista_nodi_rete.getNumElementi()<<" nodi"<<endl; cout<<"Mediamente il percorso tra un nodo secondario e il principale e' costituito da N passi"<<endl; system("pause"); system("CLS"); } break; case 0:{ cout<<"Arrivederci\n"; system("pause"); break; } default:{ cout<<"Voce di menu non valida: riprovare!!\n"; system("pause"); } } }while(scelta!=0); return 0; } Il compilatore mi genera il seguente errore: error C2062: tipo 'int' imprevisto nella definizione dell'iteratore. Ma come è possibile? non capisco proprio. L'unica cosa che sono riuscito a capire è che non è possibile utilizzare l'iterator fuori dal mai...ma mi sembra strano che non sia possibile farlo. vi prego, datemi una mano. Ultima modifica di x-t : 08-05-2008 alle 12:24. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:08.