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 :

comment initialiser un tableau dans un constructeur ?


Sujet :

MFC

  1. #1
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut comment initialiser un tableau dans un constructeur ?
    salut:

    soit la classe suivante :
    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
     
    class CCardList
    {
    public:
     
    CCard  CurrentCardList[200];
    int TotalCheckedCards,TotalIgnoredCards,TotalCards;
     
    CCardList(int);
    virtual ~CCardList(void);
     
    void AddCardtoList(CCard);
    void UpdateCheckedCards();
    void UpdateIgnoredCards();
    };
    si je veux instancier ma classe en ayant une autre taille pour le tableau " CurrentCardList" comment proceder exactement sachant que cette noucelle taille sera par exmple lu a partir de la console?

    y a t il un moyen pour declarer ce tableau d'uen façon dyamique permettant de le cha,ger d'une classe à une autre par exmple sans se soucier d'une taille fixe !!

    merci
    Ce que l'on fait dans sa vie...

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    oui. L'utilisation d'un vector règle tous tes problèmes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //dans le .h (déclaration)
    vector<CCard, CCard>; //vector est l'équivalent std de CVector pour la MFC
    Ainsi, tu n'a plus qu'à utiliser vector.insert(), vector.erase(), etc. Tu n'as plus à te préoccuper la gestion de la mémoire ni rien.
    (plus plus d'infos, vois la msdn: vector, ou CVector pour la mfc).

    Hope it helps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La déclaration d'un std::vector n'est pas la même que celle d'un CVector. Donc :

  4. #4
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    donc tu suggere que je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CCard  CurrentCardList[200];
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vector<CCard,CCardlist>;
    c'est ca non?
    Ce que l'on fait dans sa vie...

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    euh, la syntaxe est fausse. C'est de ma faute, j'ai fais une erreur. En fait, il faut avant tout savoir si tu veux utiliser la mfc?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #6
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    oui mon application est basée sur MFC heureusement ...donc..?
    Ce que l'on fait dans sa vie...

  7. #7
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bon, j'ai encore fait une erreur: ce n'est pas CVector, mais CArray que tu dois utiliser. Voir la msdn: (http://msdn2.microsoft.com/en-us/library/4h2f09ct.aspx)

    Tu va déclarer ton tableau ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CArray <CCard, CCard> m_CurrentCardList;
    Pour insérer un élément: CurrentCardList.Add();
    Pour en supprimer un: CurrentCardList.RemoveAt();
    etc.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  8. #8
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    1- oui mais ou est ce que je passe l'element que je vais inserer? sachant qu'il s'agit d'inserer une classe dans un tableu de classe?

    2- pourquoi le choix de vector ne serait il pas approprié?
    Ce que l'on fait dans sa vie...

  9. #9
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jlassira
    1- oui mais ou est ce que je passe l'element que je vais inserer? sachant qu'il s'agit d'inserer une classe dans un tableu de classe?
    Un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MonElement* A = new MonElement(); // création d'un élément
    // MonElement est une classe quelconque qui existe déjà
    CArray<MonElement, MonElement> MonTableau; //création du tableau
    MonTableau.Add(A); //Ajout de l'element A dans le tableau.
    Pour plus de détails, voir la msdn (CArray)

    Citation Envoyé par jlassira
    2- pourquoi le choix de vector ne serait il pas approprié?
    CArray est l'équivalent MFC du vector de la std. C'est exactement pareil (sauf l'implémentation), sauf que la std est portable. Mais bon, si tu utilises déjà la mfc...
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  10. #10
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    include "CCard.h"
    .class CCardList
    {
    public:
     
    //CCard  CurrentCardList[200] ;
    CArray < CCard , CCard> CurrentCardList ;
    ....
    }
    le compilateur me genere une erreur au niveau de "CArray < CCard , CCard> CurrentCardList ;"

    et voiçi l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CCardList.h(9): error C2143: erreur de syntaxe : absence de ';' avant '<'
    CCardList.h(9): error C2501: 'CCardList::CArray' : Spécificateurs de type ou de classe de stockage manquants
    je ne comprends pas !! pourtant c la bonne syntaxe!!
    Ce que l'on fait dans sa vie...

  11. #11
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    tu as bien inclu le <afxtempl.h>?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  12. #12
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    oui c'est bon merci ca compile ...je vais decouvrir ce type maintenant
    Ce que l'on fait dans sa vie...

  13. #13
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    salut,

    malgré que j'ai résolu le probleme ..une petite anomaliedemeure un peu inquietante pour moi

    au fait j'ai essaye d'utiliser CArray pour construire un tableau de string ...comme suit:
    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
     
    #include "..\include\ccardlist.h"
    #include "CCard.h"
    #include <afxtempl.h>
    typedef  CArray <string,string> FBCList;
     
    ...
    FBCList CCardList::getRemainingCards(CCardList m_CurrentCardList)
    {
        FBCList UntreatedCards ;
     
    	for ( int i = 0 ; m_CurrentCardList.CurrentCardList.GetSize() ; i++)
       {
         CCard a ;
    	 if (a.getchecked() == false)
         UntreatedCards.Add(a.getFBC());	
     
       }
     
       return UntreatedCards.Copy() ;
     
    }
    le compilateur me genere l'erreur suivante au niveau de la ligne return :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CCardList.cpp(74): error C2660: 'CArray<TYPE,ARG_TYPE>::Copy' : la fonction ne prend pas 0 arguments
            with
            [
                TYPE=std::string,
                ARG_TYPE=std::string
            ]
    comment je peux y remedier pour retourner enfin mon tableau de string? ou est l'anomalie? de quel constructeur manquant s'agit il ?

    merci
    Ce que l'on fait dans sa vie...

  14. #14
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    quelle est la signature de CCard ::getFBC() ?

    ha aussi, essaie de remplacer des string par des CString. Tant qu'à utiliser la mfc...

    [edit]argh, je n'avais pas vu: la méthode Copy prends un argument. Voir la msdn: http://msdn.microsoft.com/library/de...ons_carray.asp[/edit]
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  15. #15
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string CCard::getFBC()
    {
    	return FBC;
    }
    c'est la bonen signature ..elle retourne string exactement le type d'un elemen,t à ajouter ...je ne comprends pas!
    Ce que l'on fait dans sa vie...

  16. #16
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    voir mon post précédent
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  17. #17
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    alors c'est ou la faute selon vous? pourquoi je ne peux pas retourncer ce CArray ?
    Ce que l'on fait dans sa vie...

  18. #18
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    y aura pas de problemes si je passe quand meme un string dans la variable CString? pas de conversion necessaire?
    Ce que l'on fait dans sa vie...

  19. #19
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    j'ai essaye !! mais en vain !! je ne comprends pas une simple operation comme celle la echoue!!! pourquoi je ne peux pas retourner le resultat comme ca !
    Ce que l'on fait dans sa vie...

  20. #20
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    tu utilises mal la méthode Copy
    Citation Envoyé par ton compilo
    'CArray<TYPE,ARG_TYPE>::Copy' : la fonction ne prend pas 0 arguments
    Voir la msdn: http://msdn.microsoft.com/library/de...ons_carray.asp
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/01/2007, 09h48
  2. [C#] Comment intégrer un tableau dans un tableau ?
    Par tazmania dans le forum ASP.NET
    Réponses: 57
    Dernier message: 17/08/2006, 16h59
  3. Réponses: 5
    Dernier message: 11/05/2006, 14h15
  4. Comment définir un tableau dans une classe?
    Par Pragmateek dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 30/04/2006, 20h34
  5. Comment afficher un tableau dans TStringGrid ?
    Par doubledj dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/09/2005, 02h21

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