Bonjour à tous.
Avant toutes choses, je tiens à m'excuser si une présentation était obligatoire. Je n'ai pas trouvé le topic de présentation. Je vous avoue n'avoir que moyennement cherché ceci dit. Je vais me contenter de faire très court afin de laisser placer au vif du sujet : appellez moi Eox (même si mon pseudo dit le contraire. La raison de sa présence est la restriction à 5 lettres). Je suis étudiant à l'IUT d'Orsay, en première année de Licence informatique.
Bref, la raison de mon message est que j'ai quelques problèmes avec un travail que l'on m'a demandé de faire en tant que mini projet étudiant. Ce projet a pour but de créer une version simplifiée de Facebook (ce que je j'approuve peu vu que je hais ce réseau social... M'enfin soit.). Je devais donc créer deux classes, une classe regroupant les personnes et un autre regroupant les donnés Facebook. Voici le code de l'header :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| #ifndef FB_H_
#define FB_H_
#include <iostream>
#include <string>
using namespace std;
const int MAX = 10;
class Personne
{
private :
string _name;
string _surname;
public :
Personne();
Personne(string _name, string _surname);
void affiche()const;
void saisir();
string getNom()const;
string getPrenom()const;
bool operator== (Personne &p) const;
bool operator<= (Personne &p) const;
bool inscription();
//ostream & operator << (const Personne &p);
};
/*
Classe Personne
Attributs :
_name, _surname : Chaîne de caractères.
Methodes :
affiche() {affiche le nom et le prénom d'une personne}
saisir() {permet d'entrer le nom et le prénom d'une personne}
getNom() {renvoie le nom d'une personne}
getPrenom() {renvoie le prénom d'une personne}
operator== (Personne &p) {opérateur de comparaison, renvoie vrai si deux Personnes sont identiques}
operator<= (Personne &p) {opérateur de comparaison pour le tri selon un ordre alphabétique}
inscription() {permet d'inscrire une personne dans le réseau. Renvoie faux si une personne du identique est inscrite dans le réseau.}
*/
class Facebook
{
private :
string _fb[MAX][2];
bool _tabRelation[MAX][MAX];
int _nbPers;
int _tabID[MAX];
public :
Facebook(string _fb[MAX][2], bool _tabRelation[MAX][MAX], int _nbPers, int _tabID[MAX]);
void init();
void creerCompte(Personne &p);
void affiche(Personne &p)const;
void fermerCompte(Personne &p);
};
/*
Classe Facebook
Attributs :
_fb : tableau [MAX,2] de chaînes de caractère.
_tabRelation : tableau [MAX,MAX] de booléens.
_nbPers : entier.
_tabID : tableau [MAX] d'entiers.
Méthodes :
init() {initialise les données de la classe Facebook}
// cette méthode n'était pas demandée et a été ajoutée pour plus de confort.
creerCompte(personne) {crée le compte d'une personne}
affiche{personne} {affiche le contenu du réseau de la façon suivante : "Exemple Machin est ami avec : Test Truc"}
fermerCompte() {ferme le compte d'une personne via la saisie de son ID}
*/
#endif |
Note : pas toutes les méthodes ont encore été crées/déclarées par rapport a ce qui était demandé dans mon projet. Aussi on ne s'intéressera qu'a celles qui me posent problème pour le moment.
S'en suit quelques méthodes codées, et deux problèmes dus aux classes.
Voici le code du fichier des méthodes de la classe personne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #include <iostream>
#include "FB.h"
#include <string>
using namespace std;
/*
procédure affiche
{affiche une personne du réseau}
Pas de paramètres.
*/
void Personne::affiche() const
{
cout << _name;
cout << _surname;
}
/*
procédure saisir
{saisis une personne.}
Pas de paramètres.
*/
void Personne::saisir()
{
cin >> _name;
cin >> _surname;
}
/*
Fonction getNom retourne chaîne
{retourne le nom d'une personne}
Pas de paramètres.
*/
string Personne::getNom() const
{
return (_name);
}
/*
Fonction getPrenom retourne chaîne
{retourne le prénom d'une personne}
Pas de paramètres.
*/
string Personne::getPrenom() const
{
return (_surname);
}
bool Personne::operator== (Personne &p) const
{
return ((p._name == _name) && (p._surname == _surname));
}
// Les deux fonctions suivantes en commentaire sont des ébauches incomplètes ou ne fonctionnant pas
/*bool Personne::operator<= (Personne &p) const
{
return
}
*/
/*ostream & operator<< (ostream & o, const Personne &p)
{
co << p.getNom() << " " << p.getPrenom;
return o;
}
*/
/*
Fonction inscription retourne booléen
{permet d'inscrire une personne dans le réseau. Renvoie faux si une personne du identique est inscrite dans le réseau.}
Pas de paramètres.
*/
bool Personne::inscription()
{
cout << "Voulez-vous vous inscrire ? Y/N" << endl;
bool rep;
char ans;
cin >> ans;
rep = (ans == 'y' || ans == 'Y');
if (rep)
{
saisir();
creerCompte();
}
} |
...Et maintenant le code du fichier des méthodes de la classe Facebook.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| #include <iostream>
#include "FB.h"
#include <string>
using namespace std;
void Facebook::creerCompte(Personne &p)
{
p.saisir();
_nbPers = _nbPers++;
_tabID[_nbPers] = _nbPers;
_fb[_nbPers][1] = p.getNom();
_fb[_nbPers][2] = p.getPrenom();
for (int i=0;i<_nbPers;i++)
{
for (int j=0;j<_nbPers;j++)
{
if ( i != _nbPers && j != _nbPers) _tabRelation[i][j] = false;
else _tabRelation[i][j] = true;
}
}
}
void Facebook::affiche(Personne &p)const
{
int i=0;
bool find = false;
while (find && i < _nbPers)
{
find = (p.getNom() == _fb[i][1] && p.getPrenom() == _fb[i][2]);
i++;
}
for(int j=0;j<_nbPers;j++)
{
if (_tabRelation[i][j])
{
p.getNom();
cout << " ";
p.getPrenom();
cout << " est ami avec " << _fb[j][1] << _fb[j][2] << endl;
}
}
}
void Facebook::fermerCompte()
{
int id;
cin >> id;
_nbPers = _nbPers--;
for (int i=_nbPers;i>id;i--)
{
_tabID[i-1] = _tabID[i];
_fb[i-1][1] = _fb[i][1];
_fb[i-1][2] = _fb[i][2];
}
for (int i=_nbPers;i>id;i--)
{
for (int j=_nbPers;j>id;j--)
{
_tabRelation[i-1][j]=_tabRelation[i][j];
}
}
}
void Facebook::init()
{
_nbPers = 0;
for (int i=0;i<MAX;i++)
{
_tabID[i]=0;
for (int j=0;j<MAX;j++)
{
_tabRelation[i][j] = false;
}
}
} |
Pour finir voici le code du main.cpp :
1 2 3 4 5 6 7 8 9 10 11 12
| #include <string>
#include <iostream>
#include "FB.h"
using namespace std;
int main()
{
Facebook fb (string _fb[MAX][2], bool _tabRelation[MAX][MAX], int _nbPers, int _tabID[MAX]);
fb.init;
return 0;
} |
J'ai donc deux problèmes :
1 : dans la fonction Personne::inscription, impossible d'utiliser la procédure creerCompte de la classe Facebook. Inverser l'ordre des deux classes me donne un autre problème au niveau d'une autre méthode de la classe Personne.
error : 'creerCompte' was not declared in this scope.
2 : impossible d'utiliser la fonction init, que j'ai crée pour permettre d'initialiser les attributs de la classe Facebook.
error: request for member 'init' in 'fb', which is of non-class type 'Facebook(std::string (*)[2], bool (*)[10], int, int*)'|
Explication pour la classe Facebook au cas où :
La classe possède en attributs un tableau de booléens pour définir les relations d'amitié (_tabRelation), un tableaux d'ID pour choper les personnes plus facilement lorsque je dois faire une recherche de personnes (_tabID), le nombre de personnes actuelles (_nbPers) et un tableau tout bête à deux colonnes regroupant les noms et prénoms des personnes (_fb). Le but des méthodes est dans la définition algorithmique de la classe.
Comment puis-je résoudre mes deux problèmes ?
- Merci s'avance. :)
PS : si vous voyez d'autres problèmes logiques dans mon code, merci de me proposer votre solution.
Partager