Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  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 :
    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 :
    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 :
    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é
    Homme Profil pro Pierre
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 1 791
    Points : 3 736
    Points
    3 736

    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.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.

  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 :
    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 :
    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 actuellement connecté
    Expert Confirmé Sénior

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

    Informations forums :
    Inscription : août 2004
    Messages : 4 070
    Points : 5 085
    Points
    5 085

    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 !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •