Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    [C++] Errore sulle classi...Help!

    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.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,313

    Moderazione

    Originariamente inviato da tulkas85
    Volevo implementare 2 classi, una per la gestione del nodo del grafo , l'altra per la gestione delle liste... ma mi da degli errori.
    Quali errori? Dovresti indicare quali sono per non costringere chi risponde a copiare e incollare il codice, peraltro parziale, e testarlo per individuarli, magari per una banalità.

    Usa titoli più significativi per le tue prossime discussioni.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    Allora il problema risiede nel fatto che non mi fa mettere un puntatore alla seconda classe all'interno della prima classe.
    Lasciate perdere i commenti ho dimenticato di eliminare quelli inutili copio il codice essenziale e gli errori riscontrati:

    #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;
    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;}

    //Realizzo una void che inserisce i nomi delle aziende ed i corrispettivi numeri di telefono
    //nella tabella
    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;
    }
    bool verifica(int num)
    {
    lista *p=this->lista;

    bool trov=true;
    while(p!=NULL && trov==true)
    {
    if(num==p->nodo->vert)
    trov=false;

    p=p->next;
    }

    return trov;

    }
    };


    void main()
    {

    //creazione grafo
    grafo *GRAFO[SIZE];
    }

    Finestra output:

    Compiling...
    main.cpp
    I:\algoritm\aaaa\main.cpp(15) : error C2143: syntax error : missing ';' before '*'
    I:\algoritm\aaaa\main.cpp(15) : error C2501: 'grafo' : missing storage-class or type specifiers
    I:\algoritm\aaaa\main.cpp(15) : error C2501: 'nodo' : missing storage-class or type specifiers
    I:\algoritm\aaaa\main.cpp(19) : error C2629: unexpected 'class lista ('
    I:\algoritm\aaaa\main.cpp(19) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
    Error executing cl.exe.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    Salve, ripropongo il problema posto sopra, sintetizzando il tutto.

    Devo creare un grafo utilizzando liste di adiacenza.
    Il grafo lo creo dichiarando nel main un array di n elementi di tipo
    grafo (grafo è una classe).
    Ogni elemento di questo array è collegato tramite puntatore ad una lista.
    Per la gestione della lista utilizzo un altra classe.
    Sono costretto ad utilizzare queste due classi per l'implementazione di diversi algoritmi.
    Ora ho il problema che non riesco a collegare le due classi tramite i puntatori, mi è stato suggerito di utilizzare i template e non saprei come fare.

    copio il codice essenziale per chiarire la situazione:

    codice:
    #include <iostream>
    #define SIZE 50//size del grafo=numero dei vertici
    #include <string>
    
    using namespace std;
    
    class lista
    {
    private:
    	lista *pnext;
    	grafo *nodo;  //qui presenta l'errore però il collegamento alla struttura grafo mi serve !!
    	int peso;
    public:
    	
    	//tralasciate questo costruttore
    	/*lista(grafo **N, int pes)
    	{
    		nodo=N;
    		peso=pes;
    		p_next=NULL;
    	}*/
    
    };
    		
    	
    
    class grafo 
    {
    private:
    	
    	
    	int vert;        
    	
    	lista *next;   
    	string color;  
    	grafo *p;      
    	int d;        
    
    public:	
    
    	//Realizzo il costruttore per l'inizializzazione dei dati membro
    	grafo (int v)
    	{
    		vert=v;
    		
    		next=NULL;
    	}
    
    };
    
    
    void main()
    {
    
    
    	//creazione grafo
    	grafo *GRAFO[SIZE];
    }
    ecco gli errori:

    Compiling...
    main.cpp
    I:\algoritm\aaaa\main.cpp(11) : error C2143: syntax error : missing ';' before '*'
    I:\algoritm\aaaa\main.cpp(11) : error C2501: 'grafo' : missing storage-class or type specifiers
    I:\algoritm\aaaa\main.cpp(11) : error C2501: 'nodo' : missing storage-class or type specifiers
    Error executing cl.exe.

    grazie per chi avrà tanta pazienza e ingegno

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    nessun aiutino ???

  6. #6
    Puoi risolvere aggiungendo una "forward declaration" prima di utilizzare "grafo".

    Originariamente inviato da tulkas85
    codice:
    #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;
    
    
    // forward declaration
    class grafo;
     
    
    class lista
    {
    <il resto rimane uguale>

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    grazie ora ho da risolvere tanti altri problemi ma spero si riuscire a cavarmela !!!


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.