p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : février 2013
    Messages : 29
    Points : 0
    Points
    0

    Par défaut [Aide] Design Pattern Composite

    Bonjour,
    Je travail sur un projet étudiant et je dois réaliser un programme où l'on dessines des formes 2D (sur 3 "fenêtres", une par dimension) qui sont rendus en 3D (dans une 4e fenêtre) via une bibliothèque.
    Je vous met mon Diagramme de Classes :
    je me heurte à un problème d'héritage pour le design pattern composite (Scene et Objet héritent de Composite) et à l'utilisation des QVector, l'erreur est liée au fait que la classe héritée Scene contient un QVector<Composite> (Composite n’étant jamais instanciée) et que lors de la construction par copie de Scene on copie le QVector de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Scene::Scene(const Scene & _scene)
        : Composite(_scene.getNom())
    {
        objetsScenes=_scene.getObjetsScenes();
    }
    on a pourtant bien surchargé l’opérateur = de Scene :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Scene& Scene::operator=(const Scene & _scene)
    {
        objetsScenes = _scene.getObjetsScenes();
        return *this;
    }
    objetsScenes étant le QVector<Composite>

    On obtient les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    scene.cpp:14: instantiated from here "objetsScenes=_scene.getObjetsScenes();"
    qvector.h:509: erreur : no matching function for call to 'Composite::Composite()'
    composite.h:9: candidates are: Composite::Composite(const Composite&)
    composite.h:8:                 Composite::Composite(QString)
    Merci.

  2. #2
    Expert Confirmé Sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    3 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 3 265
    Points : 8 438
    Points
    8 438

    Par défaut

    tu n'as simplement pas de constructeur "par défaut" (sans arguments) dans Composite
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : février 2013
    Messages : 29
    Points : 0
    Points
    0

    Par défaut

    En effet, merci.
    Maintenant j'ai une erreur dans mes constructeur par copie des héritiers de Objet (Pave, Cylindre, Sphere) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pave::Pave(const Pave & _pave)
        : Objet(_pave.getNom())
    {
        this->hauteur = _pave.getHauteur();
        this->largeur = _pave.getLargeur();
        this->profondeur = _pave.getProfondeur();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cylindre.cpp:12: erreur : passing 'const Cylindre' as 'this' argument of 'double Cylindre::getHauteur()' discards qualifiers
    cylindre.cpp:13: erreur : passing 'const Cylindre' as 'this' argument of 'double Cylindre::getRayon()' discards qualifiers
    merci pour l'aide.

  4. #4
    r0d
    r0d est déconnecté
    Expert Confirmé Sénior

    Profil pro
    Inscrit en
    août 2004
    Messages
    4 186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : août 2004
    Messages : 4 186
    Points : 5 955
    Points
    5 955

    Par défaut

    Bonjour,

    à vue de nez, je dirais que les fonctions membres getHauteur(), getLargeur() et getProfondeur() n'ont pas le qualificateur 'const', qu'ils devraient avoir.

  5. #5
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : février 2013
    Messages : 29
    Points : 0
    Points
    0

    Par défaut

    En effet, encore une fois.
    Merci !

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2015, 00h21
  2. Modélisation à l'aide du design pattern Observer
    Par Pierre Castelain dans le forum Téléchargez
    Réponses: 0
    Dernier message: 03/02/2013, 17h26
  3. Réponses: 5
    Dernier message: 24/02/2010, 16h17
  4. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  5. [Design Patterns] Architecture 3 tiers
    Par HPJ dans le forum Design Patterns
    Réponses: 1
    Dernier message: 29/07/2003, 11h49

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