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

Visual C++ Discussion :

Tableau d'objet managé


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut Tableau d'objet managé
    Bonjour,

    J'ai créé une classe contenant notamment des String ^, j'ai donc été obligé de passer cette classe en managé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ref class ClassA 
    {
       public : 
         String^ MaChaine;
         int MonEntier;
    }
    J'ai une deuxième classe qui doit contenir un tableau de ClassA de taille variable. J'ai donc essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ref class ClassB
    {
        public:
          ClassA * MonTableau;
    }
    Malheureusement, le compilo me lève une erreur m'expliquant que je ne peux pas faire de * sur un objet managé...Mais si je mets un ^, est-ce vraiment un tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    error C3699: '*' : impossible d utiliser cette indirection sur le type 'ClassA'
    1>        le compilateur remplace '*' par '^' pour poursuivre l'analyse
    Bien sûr, vous l'aurez compris, j'ai un peu de mal avec les tableaux non contraints (je me souviens mal de mes jeunes études où M. Garetta m'apprenait les listes chainées...) , je débute carrément avec les objets managés...

    Donc, ma question :
    Comment faire un tableau d'objet managé de taille variable, et le parcourir ?


    Merci d'avance...

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    effectivement tu ne peux utiliser * mais ^ pour ta classe managée .
    apres tu fais un gcnew dessus avec le nombre d'elements specifiés.
    tu peux aussi utiliser un array pour gerer ton tableau ..

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Je vais essayer avec un ArrayList... Je teste et je reviens dire si c'était une bonne idée..

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Le monsieur n'a pas dit ArrayList, il a dit cli::array<>. C'est ça, le type des tableaux managés.

    Tu peux aussi utiliser une List<> à la place de ArrayList, car List<> a l'avantage d'être fortement typé...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Bon, puisque c'est demander gentiment, j'ai essayé avec List<>, mais à la compilation j'ai droit à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C3225: l'argument de type générique de 'T' ne peut pas être 'ClassA', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    lorsque je déclare dans mon .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ref class ClassB
    {
        public :
             ...
    	List<ClassA>^ Alist;
    }
    Je précise que les déclarations de ClassA et ClassB sont dans le même .h avec ClassA avant ClassB

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Essaie List<ClassA^>^ Alist;
    Ou bien, array<ClassA^>^ MonTableau;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Citation Envoyé par Médinoc
    Essaie List<ClassA^>^ Alist;
    Ou bien, array<ClassA^>^ MonTableau;
    Bon, avec List<ClassA^>^ Alist; ca compile bien...sauf que lorsque je fais un ADD...il semble que ma list n'est pas instancié..
    bien que j'ai fait un peu plus haut dans le code ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<ClassA ^> MaListe = gcnew List<ClassA ^> ();

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Ok, ca fontionne..tout simplement que l'initilisation doit être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this->MaListe = gcnew List<ClassA ^> ();
    puisqu'il est déjà déclaré...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Tout fonctionne...Merci bien

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

Discussions similaires

  1. Tableau d'objets managés?
    Par bertry dans le forum C++/CLI
    Réponses: 2
    Dernier message: 30/10/2010, 19h08
  2. Tableau d'objets
    Par moulefrite dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 14h14
  3. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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