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 :

Créer une instance via un constructeur qui intègre enum.


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Créer une instance via un constructeur qui intègre enum.
    Bonjour à tous.

    je me casse la tête sur un problème de syntaxe que je n'arrive pas à solutionner.

    je désire déclarer une instance à partir de ce constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point(qreal x, qreal y, QWidget* widget, QString name = QString(), enum Alignment alignment = Middle);
    Middle étant la valeur par défaut de l'énumération, si je crée un point de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point* labelCourant = new Point(3.974722, 43.578361,button,"FJR");
    ça fonctionne.

    Maintenant je voudrais changer l'alignement et je n'arrive pas à trouver la syntaxe de fin.

    Le plus simple aurait été :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point* labelCourant = new Point(3.974722, 43.578361,button,"FJR", Top);
    Mais voilà, c'est trop simple.

    Comment doit-on implémenter ce code pour modifier l'alignement ?

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    En dehors du fait que le mot-clé enum n'a rien à faire dans les paramètres, ton code est correct, si tenté que Alignment n'est pas un enum class auquel cas Middle devrait être Alignment::Middle. Si tu as une erreur, peut-être faudrait-il la fournir pour qu'on soit au courant de quelle est-elle ?
    Y'a peut-être aussi des problème de portée ou namespace, mais là encore ma boule de crystal est au SAV.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Homme Profil pro
    automatisme
    Inscrit en
    Octobre 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : automatisme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 54
    Points : 152
    Points
    152
    Par défaut
    Bonjour,
    Où est déclarée ton enum?
    Lorsque tu compiles, tu n'as pas d'erreur si j'ai bien compris mais ton alignement ne change pas ?

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Si l'enum Alignment est défini dans Point, pour y avoir accès en dehors de Point il faut utiliser Point::Middle ou bien Point::Alignment::Middle si c'est un enum class.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci pour votre aide, à tous trois.

    ou bien Point::Alignment::Middle si c'est un enum class
    C'était bien cela ! Je n'aurai pas eu l'idée de l'écrire comme ceci.

    Si je comprends bien, il s'agirait donc d'une enum class ? Où est-ce le namespace qui l'impose ?

    Voici la partie de code concernée du point.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include "point.h"
    namespace qmapcontrol
    {
    ...
     
        Point::Point(qreal x, qreal y, QWidget* widget, QString name, enum Alignment alignment)
                : Geometry(name), X(x), Y(y), mywidget(widget), myalignment(alignment)
        {
            // Point(x, y, name, alignment);
            GeometryType = "Point";
            mypixmap = QPixmap();
            visible = true;
            size = widget->size();
            homelevel = -1;
            minsize = QSize(-1,-1);
            maxsize = QSize(-1,-1);
     
            if(mywidget!=0)
            {
                mywidget->show();
            }
        }
     
    ...
     
     
     
       QPoint Point::alignedPoint(const QPoint point) const
        {
            QPoint alignedtopleft;
            if (myalignment == Middle)
            {
                alignedtopleft.setX(point.x()-displaysize.width()/2);
                alignedtopleft.setY(point.y()-displaysize.height()/2);
            }
            else if (myalignment == TopLeft)
            {
                alignedtopleft.setX(point.x());
                alignedtopleft.setY(point.y());
            }
            else if (myalignment == TopRight)
            {
                alignedtopleft.setX(point.x()-displaysize.width());
                alignedtopleft.setY(point.y());
            }
            else if (myalignment == BottomLeft)
            {
                alignedtopleft.setX(point.x());
                alignedtopleft.setY(point.y()-displaysize.height());
            }
            else if (myalignment == BottomRight)
            {
                alignedtopleft.setX(point.x()-displaysize.width());
                alignedtopleft.setY(point.y()-displaysize.height());
            }
            else if (myalignment == BottomMiddle)
            {
                alignedtopleft.setX(point.x()-displaysize.width()/2);
                alignedtopleft.setY(point.y()-displaysize.height());
            }
            else if (myalignment == TopMiddle)
            {
                alignedtopleft.setX(point.x()-displaysize.width()/2);
                alignedtopleft.setY(point.y());
            }
            return alignedtopleft;
        }

    Le fait est qu'il n'y a pas dans tout ce code d'énumération du type : enum class Alignment { Top, Middle,... }. La seule fois où l'on trouve les modes d'alignements est dans cette dernière partie.
    J'ai donc un peu de difficulté à comprendre la liaison entre les deux, mais le fait est que la syntaxe proposée par dalfab fonctionne, donc .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Reflection : Créer une instance sans appeler le constructeur
    Par cboun94 dans le forum Framework .NET
    Réponses: 8
    Dernier message: 17/12/2007, 17h26
  2. Réponses: 5
    Dernier message: 09/03/2007, 21h14
  3. Réponses: 5
    Dernier message: 17/07/2006, 18h34
  4. [Débutant] Créer une instance avec le nom d'une classe
    Par Quetzalcoatl dans le forum Langage
    Réponses: 7
    Dernier message: 23/01/2006, 20h43
  5. [VB.NET]Créer une instance par page
    Par Dnx dans le forum ASP.NET
    Réponses: 20
    Dernier message: 31/10/2005, 13h22

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