Pagina 1 di 1
[Risolto] [C++] Social Network
Inviato: sabato 21 maggio 2016, 13:47
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.

Re: [C++] Social Network
Inviato: sabato 21 maggio 2016, 14:36
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
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).
Re: [C++] Social Network
Inviato: sabato 21 maggio 2016, 18:30
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

)
Re: [C++] Social Network
Inviato: domenica 22 maggio 2016, 10:37
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
Re: [C++] Social Network
Inviato: domenica 22 maggio 2016, 11:05
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.
Re: [C++] Social Network
Inviato: mercoledì 25 maggio 2016, 15:27
da SteveSicily
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!

Re: [Risolto] [C++] Social Network
Inviato: mercoledì 25 maggio 2016, 19:01
da SuperStep
se metti [Risolto] devi allegare anche la soluzione.