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

Langage C++ Discussion :

[Aide] Design Pattern Composite


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    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 : 11
    Points
    11
    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 éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    tu n'as simplement pas de constructeur "par défaut" (sans arguments) dans Composite

  3. #3
    Membre à l'essai
    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 : 11
    Points
    11
    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 éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    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
    Membre à l'essai
    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 : 11
    Points
    11
    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 Codes sources à télécharger
    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