[Risolto] [C++] Social Network

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
SteveSicily
Prode Principiante
Messaggi: 58
Iscrizione: mercoledì 30 dicembre 2009, 13:18

[Risolto] [C++] Social Network

Messaggio da SteveSicily »

Salve a tutti, sono uno studente di Ing. Informatica e per ora sto studiando C++ (con supporto allo standard C++11). Facendo un'esercizio il compilatore mi da un errore che non riesco a capire:

Codice: Seleziona tutto

In file included from impl.cpp:4:0:
header.h:12:9: error: ‘Utente’ does not name a type
         Utente *u;
         ^
header.h:13:9: error: ‘Gruppo’ does not name a type
         Gruppo *g;
         ^
In file included from main.cpp:4:0:
header.h:12:9: error: ‘Utente’ does not name a type
         Utente *u;
         ^
header.h:13:9: error: ‘Gruppo’ does not name a type
         Gruppo *g;
         ^
Vi posto anche il codice del programma scritto:
header.h

Codice: Seleziona tutto

class Rete{
    public:
        Rete();
        virtual ~Rete();

        void insGruppo();
        void insUtente();
        void UtoG();
        void stampa();

    private:
        Utente *u;
        Gruppo *g;
};

class Utente: public Rete{
    public:
        Utente();
        ~Utente();

    protected:
        std::string codice, nome, cognome, eMail;
};

class Gruppo: public Rete{
    public:
        Gruppo();
        ~Gruppo();

    protected:
        std::string data, nomeGruppo;
        Utente *ug;
};
impl.cpp

Codice: Seleziona tutto

#ifndef F
#define F
#include <iostream>
#include "header.h"
#endif // F

Rete::Rete(){

};

Rete::~Rete(){

};

Gruppo::Gruppo(){
        ug=new Utente[100];
};

Gruppo::~Gruppo(){
        delete ug;
};

Utente::Utente(){

};

Utente::~Utente(){

};

main.cpp

Codice: Seleziona tutto

#ifndef F
#define F
#include <iostream>
#include "header.h"
#endif // F

int main(){

}
(ci sto lavorando ancora)

Non capisco come risolvere, è che quei due puntatori mi servono per implementare quest'algoritmo.
:cry:
Ultima modifica di SteveSicily il mercoledì 25 maggio 2016, 15:33, modificato 1 volta in totale.
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: [C++] Social Network

Messaggio da SuperStep »

in C++ il compilatore segue la metodologia top-down, vale a dire che puoi utilizzare un tipo solo se è stato precedentemente dichiarato.

Nel caso specifico

Codice: Seleziona tutto

header.h:12:9: error: ‘Utente’ does not name a type
significa che Utente non è un tipo (classe/variabile) per cui non può essere utilizzato.

quindi devi fare una cosa del genere:

Codice: Seleziona tutto

class Utente;
class Gruppo;

class Rete{
    public:
        Rete();
        virtual ~Rete();

        void insGruppo();
        void insUtente();
        void UtoG();
        void stampa();

    private:
        Utente *u;
        Gruppo *g;
};

class Utente: public Rete{
    public:
        Utente();
        ~Utente();

    protected:
        std::string codice, nome, cognome, eMail;
};

class Gruppo: public Rete{
    public:
        Gruppo();
        ~Gruppo();

    protected:
        std::string data, nomeGruppo;
        Utente *ug;
};
questo viene chiamato forward declaration

[edit]

comunque non capisco Utente estende Rete e poi Rete possiede un riferimento a utente nelle variabili (idem per gruppo) sei sicuro che è quello che vuoi?

comunque (è un consiglio) la prossima volta metti un titolo del post che evidenzi il problema (in modo che gli altri possano sapere a priori se aiutarti).
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
SteveSicily
Prode Principiante
Messaggi: 58
Iscrizione: mercoledì 30 dicembre 2009, 13:18

Re: [C++] Social Network

Messaggio da SteveSicily »

Ti scrivo l'esercizio che "ci aveva assegnato il prof" (in verità è un esame dei precedenti appelli):

Codice: Seleziona tutto

GESTIONE SOCIAL NETWORK

Scrivete le classi necessarie per la gestione di una rete di utenti e gruppi e delle relative iscrizioni (social network). La rete ha un’elenco di utenti e un elenco di gruppi. Potreste ad esempio pensare a una classe Rete che al suo interno contiene un elenco di oggetti della classe Utente (massimo 5000) ed un elenco di oggetti della classe Gruppo (massimo 500) e dispone di tutti i metodi e delle strutture dati per aggiungere utenti e gruppi e per gestire iscrizioni degli utenti ai gruppi. Per semplicità non è prevista la possibilità di cancellarsi da un gruppo.

La classe Gruppo deve contenere il nome del gruppo, la data di creazione e e l’elenco degli utenti iscritti (massimo 100). La classe Utente deve contenere codice, nome, cognome ed email. 

Il programma deve avere le seguenti caratteristiche:
1) Funzionalità per l’inserimento in un oggetto Rete di un nuovo elemento della classe Gruppo 
2) Funzionalità per l’inserimento in un oggetto Rete di un nuovo elemento della classe Utente 
3) Gestione di iscrizione di un utente ad un gruppo con la seguente interfaccia:
a. L’operatore introduce il codice dell’utente
b. Il programma stampa i dati dell’utente
c. Il programma stampa uno alla volta i gruppi e chiede se è quello il gruppo a cui ci si vuole iscrivere. In caso affermativo viene memorizzata l’iscrizione e viene visualizzato il prossimo esame
4) Gestione stampa elenco utenti iscritti ai gruppi con la seguente interfaccia:
a. Il programma stampa uno alla volta i gruppi e chiede se è quello il gruppo di cui stampare l’elenco iscritti. In caso affermativo viene visualizzato a schermo l’elenco altrimenti viene visualizzato il prossimo gruppo.
5) Gestione stampa elenco gruppi a cui sono iscritti gli utenti con la seguente interfaccia:
a. L’operatore introduce il codice utente
b. Il sistema stampa i dati di tutti i gruppi a cui è iscritto l’utente.

Per verificare il corretto funzionamento delle vostre classi, scrivete un programma che crea un oggetto della classe Rete e visualizza, dentro un loop infinito, un menu con le seguenti opzioni:
a) Aggiungi utente
b) Aggiungi gruppo
c) Iscrivi utente a gruppo
d) Stampa elenco iscritti a gruppo
e) Stampa elenco gruppi per utente

Utilizzate la ridefinizione degli operatori << e >> se e dove lo ritenete opportuno.
Per capirci, io avevo pensato di fare due classi, Utente e Gruppo, e una classe Rete derivata da entrambi. Sto provando un paio di cose, tu cosa mi consigli? (ammesso che possa darti del tu :D )
fabio massacci
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 289
Iscrizione: mercoledì 11 giugno 2014, 14:12
Desktop: Lubuntu
Distribuzione: Ubuntu 20.04.3 LTS

Re: [C++] Social Network

Messaggio da fabio massacci »

ciao,

intanto Groppo e Utente non hanno nessuna necessità di ereditare da Rete, inoltre se leggi la traccia, è abbastanza evidente che il tuo prof vuole che tutte le azioni siano fatte da Rete, mentre utente e Gruppo sono solo dati, quindi io ti consiglio di definire questi due come semplici strutture, inoltre, se lo hai già studiato, potresti usare std::vector invece che i puntatori a Gruppo e Utente dentro Rete
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: [C++] Social Network

Messaggio da SuperStep »

come detto da @fabio massacci, l'approccio che hai scelto e' sbagliato.

cerchiamo di analizzare il problema punto per punto: (utilizzero' dello pseudocodice di esempio)
La rete ha un’elenco di utenti e un elenco di gruppi ... e dispone di tutti i metodi e delle strutture dati per aggiungere utenti e gruppi e per gestire iscrizioni degli utenti ai gruppi
quindi

Codice: Seleziona tutto

class Rete {
    List<Utente> utenti;
    List<Gruppo> gruppi;

    Utente aggiungiUtente (/*dati*/);
    Gruppo aggiungiGruppo (/*dati*/);
    void aggiungiUtenteAGruppo(Utente utente, Gruppo gruppo);
}
La classe Gruppo deve contenere il nome del gruppo, la data di creazione e e l’elenco degli utenti iscritti

Codice: Seleziona tutto

class Gruppo {
    String nome;
    Date creazione
    List<Utente> iscritti;
}
La classe Utente deve contenere codice, nome, cognome ed email.

Codice: Seleziona tutto

class Utente {
    String codice;
    String nome;
    String cognome;
    String email;
}
parti da questo.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
SteveSicily
Prode Principiante
Messaggi: 58
Iscrizione: mercoledì 30 dicembre 2009, 13:18

Re: [C++] Social Network

Messaggio da SteveSicily »

fabio massacci [url=http://forum.ubuntu-it.org/viewtopic.php?p=4884351#p4884351][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ciao,

intanto Groppo e Utente non hanno nessuna necessità di ereditare da Rete, inoltre se leggi la traccia, è abbastanza evidente che il tuo prof vuole che tutte le azioni siano fatte da Rete, mentre utente e Gruppo sono solo dati, quindi io ti consiglio di definire questi due come semplici strutture, inoltre, se lo hai già studiato, potresti usare std::vector invece che i puntatori a Gruppo e Utente dentro Rete
SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4884370#p4884370][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:come detto da @fabio massacci, l'approccio che hai scelto e' sbagliato.

cerchiamo di analizzare il problema punto per punto: (utilizzero' dello pseudocodice di esempio)
La rete ha un’elenco di utenti e un elenco di gruppi ... e dispone di tutti i metodi e delle strutture dati per aggiungere utenti e gruppi e per gestire iscrizioni degli utenti ai gruppi
quindi

Codice: Seleziona tutto

class Rete {
    List<Utente> utenti;
    List<Gruppo> gruppi;

    Utente aggiungiUtente (/*dati*/);
    Gruppo aggiungiGruppo (/*dati*/);
    void aggiungiUtenteAGruppo(Utente utente, Gruppo gruppo);
}
La classe Gruppo deve contenere il nome del gruppo, la data di creazione e e l’elenco degli utenti iscritti

Codice: Seleziona tutto

class Gruppo {
    String nome;
    Date creazione
    List<Utente> iscritti;
}
La classe Utente deve contenere codice, nome, cognome ed email.

Codice: Seleziona tutto

class Utente {
    String codice;
    String nome;
    String cognome;
    String email;
}
parti da questo.
Grazie mille, siete stati molto esaustivi. Vedrò come risolvere! :ciao:
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: [Risolto] [C++] Social Network

Messaggio da SuperStep »

se metti [Risolto] devi allegare anche la soluzione.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti