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

MFC Discussion :

Initialisation de strutures


Sujet :

MFC

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut Initialisation de strutures
    Bonjour à tous.
    J'ai un soucis pour initialiser une structure :

    Dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	struct treeItem {
    		HTREEITEM hItem;
    		int level;
    		CString txtDisplay;
    		CString txtTips;
    		CString txtFrame;
    	} ;
    Dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct treeItem tmp = {NULL, 0, "Gers", "", ""};
    Le code précédent génère l'erreur suivante :
    C2552: 'tmp' : non-aggregates cannot be initialized with initializer list
    Je ne vois pas en quoi la structure est "non-aggregates" au vu de la définition trouvée sur MSDN.

    L'initialisation champ par champ fonctionne, mais j'aimerai pouvoir le faire sur une seule ligne au vu du nombre d'entrées dont j'ai besoin.

    Je suis preneur de toute information...
    merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Par défaut
    C'est assez bizar car g pris ton code et je l'ai mis dans un programme et moi je n'ai aucun soucis....

    Tu n'as pas plusieurs variables "tmp"????

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    je viens de vérifier, tmp n'est utilisé qu'ici (pour vérifier, je l'ai renommer).

    Tu as placé la définition de la structure dans un .h ?
    Je travaille sous Visual C++ 6.0 ;cela pourrait venir de là ?

  4. #4
    Membre averti
    Profil pro
    Développement
    Inscrit en
    Janvier 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Janvier 2005
    Messages : 15
    Par défaut
    Je pense que c'est parce que tu as des classes dans ta structure.
    Tente ceci :

    - Pour la déclaration
    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
    struct treeItem { 
         // le constructeur
         treeItem(HTREEITEM item,
                      int lev,
                      LPCTSTR display,
                      LPCTSTR tips,
                      LPCTSTR frame) :
                    hItem(item),
                    level(lev),
                    txtDisplay(display),
                    txtTips(tips),
                    txtFrame(frame)
               {}
     
          // les champs de la structure
          HTREEITEM hItem; 
          int level; 
          CString txtDisplay; 
          CString txtTips; 
          CString txtFrame; 
        } ;
    - et dans ton code, voici la déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct treeItem tmp(NULL, 0, "Gers", "", "");

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je ne vois pas en quoi la structure est "non-aggregates" au vu de la définition trouvée sur MSDN
    Citation Envoyé par La MSDN
    In addition, Visual C++ does not allow data types in an aggregate that themselves contain constructors
    D'ailleurs, l'exemple fourni sur cette même page correspond presque exactement au tien, et la solution du constructeur est donnée juste après.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    merci Menuki. Ta solution revient a passer par un constructeur comme c'est effectivement décrit dans l'exemple de MSDN. Je cherchais simplement a comprendre pourquoi le mechanisme que j'utilise ne compile pas.
    D'ailleurs, pour Loulou24, il est vrai que la solution que je cherche à utiliser y est aussi décrite :
    Pair_Correct2 pair4 = { name, 0.0 }; // OK
    Mais elle ne compile pas. Je vais donc passer par le constructeur, mais je n'aime pas ne pas savoir ce qui m'a bloqué...
    En tout cas, merci à vous.

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Je viens de mettre en place la solution proposée par Menuki :
    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
    struct treeItem { 
         // le constructeur 
         treeItem(HTREEITEM item, 
                      int lev, 
                      LPCTSTR display, 
                      LPCTSTR tips, 
                      LPCTSTR frame) : 
                    hItem(item), 
                    level(lev), 
                    txtDisplay(display), 
                    txtTips(tips), 
                    txtFrame(frame) 
               {} 
     
          // les champs de la structure 
          HTREEITEM hItem; 
          int level; 
          CString txtDisplay; 
          CString txtTips; 
          CString txtFrame; 
        } ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct treeItem tmp(NULL, 0, "Gers", "", "");
    J'obtiens de même des erreurs de compilation :
    c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(62) : error C2512: 'treeItem' : no appropriate default constructor available
    c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(331) : see reference to function template instantiation 'void __stdcall ConstructElements(struct CGersCommanderDlg::treeItem *,int)' being compiled
    Gers Commander.cpp
    c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(62) : error C2512: 'treeItem' : no appropriate default constructor available
    c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(331) : see reference to function template instantiation 'void __stdcall ConstructElements(struct CGersCommanderDlg::treeItem *,int)' being compiled
    Gers CommanderDlg.cpp
    c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(62) : error C2512: 'treeItem' : no appropriate default constructor available
    c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(331) : see reference to function template instantiation 'void __stdcall ConstructElements(struct CGersCommanderDlg::treeItem *,int)' being compiled
    Me manquerait-il des options à la compilation ?

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu essayes d'utiliser le constructeur par défaut pour ta structure, or elle n'en possède plus maintenant. Il faut soit le fournir, soit revoir le code qui l'utilise.

  9. #9
    Membre averti
    Profil pro
    Développement
    Inscrit en
    Janvier 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Janvier 2005
    Messages : 15
    Par défaut
    Ah ouai!!!

    Désolé, je n'avais pas fait gaffe à ce problème.

    Comme dit Loulou24, tu peux définir le constructeur par défaut. Tu peux aussi mettre des paramètres par défaut dans le constructeur. Comme ceci :
    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
    struct treeItem { 
         // le constructeur 
         treeItem(HTREEITEM item = NULL, 
                      int lev = 0, 
                      LPCTSTR display ="", 
                      LPCTSTR tips ="", 
                      LPCTSTR frame = "") : 
                    hItem(item), 
                    level(lev), 
                    txtDisplay(display), 
                    txtTips(tips), 
                    txtFrame(frame) 
               {} 
     
          // les champs de la structure 
          HTREEITEM hItem; 
          int level; 
          CString txtDisplay; 
          CString txtTips; 
          CString txtFrame; 
        } ;
    Là, ça devrait fonctionner mieux.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Merci à vous, ça compile effectivement maintenant .
    Bonne journée.
    Aymerik

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

Discussions similaires

  1. [Servlet] Fichiers d'initialisation
    Par david71 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/09/2003, 13h47
  2. Créer et initialiser un composant TStatusBar :help:
    Par James_ dans le forum C++Builder
    Réponses: 10
    Dernier message: 21/08/2003, 08h52
  3. [servlet] initialisation d'objets
    Par tiPouick dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 05/08/2003, 12h12
  4. Initialisation de XMLModule
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 10
    Dernier message: 01/04/2003, 10h08
  5. initialisation Directinput avec delphi
    Par Madmaxx dans le forum DirectX
    Réponses: 1
    Dernier message: 21/02/2003, 17h37

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