IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Graphe g�n�rique C++


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2014
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 1
    Par d�faut Graphe g�n�rique C++
    Bonjour � tous,

    Je suis bloqu� depuis une semaine sur ce programme et j�esp�re que vous allez pouvoir m'aider.
    Je doit r�aliser un graphe g�n�rique en c++.
    Voila comment je fait les choses.

    Pour le graphe g�n�rique en lui m�me j'ai trois templates GGraphe, GSommet, GArete d�clar� de la mani�re suivante

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    template <typename TGraphe, typename USommet, typename VArete >
     
    class GGraphe{
    C'est la premi�re fois que je fait de la g�n�ricit� en c++ alors d�j� est ce que la d�claration des classes ce fait bien comme �a avec des templates ?

    Ensuite est ce que dans l'impl�mentation chaque m�thodes doit avoir �crit a nouveau template et les trois types g�n�riques que je vais utiliser de la mani�re suivante ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    template <typename TGraphe, typename USommet, typename VArete>
        GGraphe<TGraphe, USommet, VArete>::GGraphe() {
        }
    Maintenant la partie o� je bloque.
    On suppose maintenant que un utilisateur souhaite cr�er des classes qui h�ritent du graphe g�n�rique. Donc l'utilisateur cr�e trois classes (par exemple) Molecule, Atom, Arete. Pour chaque classes il fait h�rit� la classe g�n�rique correspondante. Pour Molecule : GGraphe.

    Je d�clare la classe comme ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    class Molecule : virtual public GGraphe <Molecule, Atom, Liaison>{
    C'est ici que j'ai un probl�me. Quand je compile il me dit que "Molecule" n'est pas d�finit, en effet puisqu'il est en train de compiler la classe Molecule donc elle n'existe pas encore. J'ai alors essayer de mettre ca juste avant de d�clarer la classe.

    Et alors il le compilateur me dit qu'il ne connait pas les m�thodes qui sont dans la classe Molecule.

    Voila

    Est ce que vous pouvez m'apporter votre aide ?
    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Phuy38 Voir le message
    Bonjour � tous,

    Je suis bloqu� depuis une semaine sur ce programme et j�esp�re que vous allez pouvoir m'aider.
    Je doit r�aliser un graphe g�n�rique en c++.
    Voila comment je fait les choses.

    Pour le graphe g�n�rique en lui m�me j'ai trois templates GGraphe, GSommet, GArete d�clar� de la mani�re suivante

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    template <typename TGraphe, typename USommet, typename VArete >
     
    class GGraphe{
    Mmmmoui... Peut-�tre.

    Citation Envoy� par Phuy38 Voir le message
    C'est la premi�re fois que je fait de la g�n�ricit� en c++ alors d�j� est ce que la d�claration des classes ce fait bien comme �a avec des templates ?
    Oui. Tu peux utiliser class en lieu et place de typename (synonyme et s�mentiquement plus juste, � moins que GArete puisse �tre un int).

    Citation Envoy� par Phuy38 Voir le message
    Ensuite est ce que dans l'impl�mentation chaque m�thodes doit avoir �crit a nouveau template et les trois types g�n�riques que je vais utiliser de la mani�re suivante ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    template <typename TGraphe, typename USommet, typename VArete>
        GGraphe<TGraphe, USommet, VArete>::GGraphe() {
        }
    Tu peux aussi d�finir les fonctions dans le corps de la classe :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    template <class Graph, class Vertex, class Link>
    class graph
    {
    public:
        graph()
        {
           ...
        }
    };
    Pour les fonctions qui ne sont pas trop longue, �a sera moins lourd � g�rer.

    Citation Envoy� par Phuy38 Voir le message
    Maintenant la partie o� je bloque.
    On suppose maintenant que un utilisateur souhaite cr�er des classes qui h�ritent du graphe g�n�rique. Donc l'utilisateur cr�e trois classes (par exemple) Molecule, Atom, Arete. Pour chaque classes il fait h�rit� la classe g�n�rique correspondante. Pour Molecule : GGraphe.

    Je d�clare la classe comme ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    class Molecule : virtual public GGraphe <Molecule, Atom, Liaison>{
    C'est ici que j'ai un probl�me. Quand je compile il me dit que "Molecule" n'est pas d�finit, en effet puisqu'il est en train de compiler la classe Molecule donc elle n'existe pas encore. J'ai alors essayer de mettre ca juste avant de d�clarer la classe.
    Que veut dire cette d�claration ? Une mol�cule est un graphe de mol�cule ?

    Il me semblait que c'�tait un graphe d'atomes.

    Je met le doigt sur ce qui me g�ne dans ta d�claration ci dessus : template <typename TGraphe, typename USommet, typename VArete> class CGraphe;

    Pourquoi est-ce que la classe graphe est d�finie � partir d'un graphe ? Ca na pas vraiment de sens. Un graphe est une entit� compos�e de sommets et d'arr�tes qui lient ces sommets (des liens). Un lien a des propri�t�s (arbitraire + sens si le lien est directionnel), et les sommets ont des propri�t�s arbitraires aussi - donc il est logique que les deux soient trait�s de mani�re g�n�riques par ta d�finition. Mais le param�tre TGraphe, � quoi sert-il ? La, je ne comprends pas.

    Citation Envoy� par Phuy38 Voir le message
    Et alors il le compilateur me dit qu'il ne connait pas les m�thodes qui sont dans la classe Molecule.
    Et pour cause. Tu cr�e un lien cyclique indirecte entre Molecule et elle-m�me, et ce lien indirect a besoin de conna�tre Molecule. Ca ne peut pas marcher
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre r�gulier
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2014
    Messages
    10
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Par d�faut
    Salut,

    J'ai l'impression que tu fais plus compliqu� que n�cessaire, tu as juste besoin de d�finir une classe g�n�rique :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    template <class vertex_type, class edge_type >
    class graph{
    ......
    }
    Apr�s, pour repr�senter ta mol�cule, il faut te demander quel type va repr�senter tes atomes et quel type va repr�senter tes liaisons. Le plus simple, selon moi, est d'utiliser des std::string pour les deux, m�me si en terme de performance c'est tout pourri �a � le m�rite d'�tre peut �tre plus intuitif.
    Ainsi si tu veux faire un graphe qui repr�sente une mol�cule tu peux faire un typedef :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    typedef graph<std::string, std::string> molecule;
    Est-ce que tu pourrais donner plus de code, qu'est ce qu'il y a d'impl�ment� � l'int�rieur de ta classe ?
    Quel type de mol�cule tu souhaites repr�senter ?
    Peut-il y avoir plusieurs liaisons entre deux atomes (du coup ce n'est plus un graphe mais un multigraphe, la complexit� augmente) ?

    Choisir une structure de graphe n'est pas forc�ment �vident et d�pends vraiment de ta probl�matique.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 29/01/2015, 00h51
  2. Classe pour la cr�ation d'un graphe xy
    Par Bob dans le forum MFC
    R�ponses: 24
    Dernier message: 03/12/2009, 17h20
  3. [Turbo Pascal] [Windows XP] Probl�me avec l'unit� GRAPH
    Par themofleur dans le forum Turbo Pascal
    R�ponses: 22
    Dernier message: 29/03/2003, 22h43
  4. [] [Excel] Exporter un graphe MSChart vers Excel
    Par Gonzo dans le forum Macros et VBA Excel
    R�ponses: 4
    Dernier message: 18/12/2002, 17h49
  5. Concerne les graphes
    Par mcr dans le forum Algorithmes et structures de donn�es
    R�ponses: 10
    Dernier message: 12/11/2002, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo