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

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    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.

  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 : 40
    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?

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    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?

  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..?

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    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.

  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é?

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    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...

  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!!

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    Billets dans le blog
    2
    Par défaut
    tu as bien inclu le <afxtempl.h>?

  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

  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

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    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]

  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!

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    Billets dans le blog
    2
    Par défaut
    voir mon post précédent

  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 ?

  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?

  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 !

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 267
    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 267
    Points : 6 692
    Points
    6 692
    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

+ 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, 10h48
  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, 17h59
  3. Réponses: 5
    Dernier message: 11/05/2006, 15h15
  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, 21h34
  5. Comment afficher un tableau dans TStringGrid ?
    Par doubledj dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/09/2005, 03h21

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