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 :

Pointeur vers struct


Sujet :

C++

  1. #1
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut Pointeur vers struct
    bonjour,
    j'essaye de faire un pointeur faire une structure, mais je n'y arrive pas.
    voici mon entete :
    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
     
    #ifndef MDICHILD_H
    #define MDICHILD_H
     
    #include <QWidget>
     
    class mdiChild : public QWidget
    {
        Q_OBJECT
        Q_ENUMS( Type )
        public:
            enum Type
            {
            iAll = 0x0,
            iText = 0x1,
            iSQL = 0x2,
            iBrowser = 0x4,
            };
            Q_DECLARE_FLAGS( Types, Type )
     
            // child info structure
            struct childInfos
            {
                QString title; // the string to show as caption
                mdiChild::Types Type; // the plugin type ( can be or-ded
            };
     
            mdiChild(QWidget* parent);
            ~mdiChild();
            //typedef struct childInfos *info;
            struct childInfos *info;
    };
    #endif // MDICHILD_H
    et voici le code ou j'essaye de manipuler la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "mdiChild.h"
     
    mdiChild::mdiChild(QWidget* parent):QWidget( parent )
    {
        //struct childInfos info;
        info->title = "test";
        //info->Type = mdiChild::iText;
    }
     
    mdiChild::~mdiChild()
    {
    }
    est ce que quelqu'un peux m'expliquer comme faire ?
    merci

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjours,
    Pourrai tu dire se qui ne marche pas précisément?
    Problème a la compilation, édition des lien, ou exécution? Message d'erreur?

    A première vu tu a surement un problème a l'exécution, a la ligne:
    info->title = "test";
    Car info n'as pas été alloué.

    Tu peu fair comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mdiChild::mdiChild(QWidget* parent):QWidget( parent ):info(new childInfos())
    {
        info->title = "test";
    }
    mdiChild::~mdiChild()
    { 
      delete info;
    }
    Ou alors ne déclare pas info en tant que pointeur mais en tant qu'instance.(préférable si il n'y a pas de raison particulière d'utiliser un pointeur)

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    En C++, on ne rajoute pas le mot-clef 'struct' devant le nom du type lorsque l'on souhaite déclarer une variable du type de la structure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct MaStruct 
    {
      ...
    };
    int main()
    {
      MaStruct s; // Et pas struct MaStruct s
    }

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Effectivement, un vieux reste de C à oublier en C++:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class mdiChild : public QWidget
    {
    [...]
            struct childInfos
            {
                QString title; // the string to show as caption
                mdiChild::Types Type; // the plugin type ( can be or-ded
            };
     
            childInfos *info;
    };

  5. #5
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    merci de vos réponses, cela ma aidé à résoudre mon problème.

    Je remet la classe, dès fois que ça peu aider quelqu'un !
    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
    #ifndef MDICHILD_H
    #define MDICHILD_H
     
    #include <QWidget>
     
    class mdiChild : public QWidget
    {
        Q_OBJECT
        Q_ENUMS( Type )
        public:
            enum Type
            {
            iAll = 0x0,
            iText = 0x1,
            iSQL = 0x2,
            iBrowser = 0x4,
            };
            Q_DECLARE_FLAGS( Types, Type )
     
            // child info structure
            struct childInfos
            {
                QString title; // the string to show as caption
                mdiChild::Types Type; // the plugin type ( can be or-ded
            };
     
            mdiChild(QWidget* parent);
            ~mdiChild();
            childInfos *info;
    };
    #endif // MDICHILD_H
    et le corp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "mdiChild.h"
     
    mdiChild::mdiChild(QWidget* parent):QWidget( parent ),info(new childInfos())
    {
        //struct childInfos info;
        info->title = "test";
        //info->Type = mdiChild::iText;
    }
     
    mdiChild::~mdiChild()
    {
        delete info;
    }

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Pourquoi utiliser un pointeur et pas directement une structure ?
    Si tu utilises un pointeur, il te faut redéfinir l'opérateur d'affectation et le constructeur de copie (en plus du constructeur et du destructeur).

    Si tu utilises une structure directement, tu n'as rien à faire et c'est plus efficace.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Pourquoi utiliser un pointeur et pas directement une structure ?
    Si tu utilises un pointeur, il te faut redéfinir l'opérateur d'affectation et le constructeur de copie (en plus du constructeur et du destructeur).

    Si tu utilises une structure directement, tu n'as rien à faire et c'est plus efficace.
    ++
    Pour continuer dans ce sens, je te conseillerais d'utiliser boost::smart pointer si tu veux utiliser un pointeur, ou boost::optional si le membre peut être optionnel.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/09/2011, 23h27
  2. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  3. Réponses: 12
    Dernier message: 31/12/2005, 16h01
  4. Pointeur vers fonction
    Par flopaname dans le forum Langage
    Réponses: 3
    Dernier message: 23/06/2005, 15h46
  5. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43

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