+ 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é Sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 2 342
    Points : 5 516
    Points
    5 516

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

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

    Informations forums :
    Inscription : août 2004
    Messages : 4 112
    Points : 5 778
    Points
    5 778

    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
  •