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

VC++ .NET Discussion :

[C++ .NET] Tableau dynamique


Sujet :

VC++ .NET

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut [C++ .NET] Tableau dynamique
    Bonjour tous le monde

    Voici mon probl�me :

    au chargement de mon formulaire je dois instantier une variable tableau de type "MACLASSE" ou "MACLASSE" est ma classe de base MAIS je connai pas d'avance la taille de mon tableau, j'ai donc besoin de pouvoir ajouter des �l�ments � mon tableau de mani�re dynamique (une structure cha�n�e ou �quivalent (je ne veux pas d�clarer par exemple un tableau de 100 �l�ments ce qui serait soit trop grand soit pas assez et de toute mai�re pas optimis�e)).


    Je fais :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    MACLASSE *tt = new MACLASSE *[];
    tt[0]->MA_METHODE();
    Le probl�me c'est qu'au lancement du programme je recois une exception "index out of range". Comme instanci� l'index 0 du tableau au d�marrage pour pouvoir l'utiliser ? (et comment ajouter d'autres �lements � mon tableau dynamiquement par la m�me occasion ? )

    On m'a parl� de la fonction "vector" �galement mais j'aimerai plut�t m'en passer (ce n'est pas moi qui d�cide).

    Merci d'avance je commence � perdre la t�te


  2. #2
    Membre �clair�
    Inscrit en
    Juin 2003
    Messages
    82
    D�tails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 82
    Par d�faut
    tu as la classe ListArray qui existe et qui fonctionne comme un liste chain�e.

    Tu peux ajouter et supprimer des �lements de ta liste sans la surdimmensionner.
    Tu peut mettre toute sorte de valeur (objet, entier, string ...).

    @+

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    ok merci

    mais j'ai un probl�me

    je fais :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    ArrayList *Alist = new ArrayList();
    MACLASSE *test = new MACLASSE();
    Alist->Add(test);
    Ensuite je veux utiliser mon objet test qui contient une m�thode nomm� MAMETHODE et je fais :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Alist[0]->MAMETHODE();
    mais ca ne fonctionne pas il me propose aucun �lement quand je fais -> pourtant ma classe MACLASSE poss�de bien plusieurs m�thodes en public.

    Comment faire pour que cela fonctionne ?(j'ai test� regard� sur plusieurs sites mais sans trouver la raison de mon probl�me)

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    bon une solution en faisant un cast

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    MACLASSE* ti = new MACLASSE;
    ti = static_cast<MACLASSE *>(Alist->Item[0]);
    a partir de ce moment je peux bien acc�der au m�thode de "MACLASSE" gr�ce � l'objet "ti" mais existe t'il une m�thode plus simple pour enregistrer directement dans mon ArrayList mon objet sans avoir � faire un cast apr�s pour pouvoir l'utiliser ?

  5. #5
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Tu es oblig� de caster car le type d'�l�ments contenus dans ArrayList est Object.
    Les templates avec .NET 2 permettront de faire des collections typ�es

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    Citation Envoy� par abelman
    Tu es oblig� de caster car le type d'�l�ments contenus dans ArrayList est Object.
    Les templates avec .NET 2 permettront de faire des collections typ�es
    et ben on en apprend toutes les minutes avec .net Vivement la version 2 du framework alors Je pensai que c'�tait possible car en cherchant dans MSDN j'ai vu qu'on pouvait enregistrer dans un array list en donnant le type
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
     myAL->Add( S"brown" );
    Le fait de rajouter S siginifie String n'est-ce pas et on peut �galement ajouter Object si c'est un objet ce qui est mon cas. A quoi cela sert t'il de pr�ciser le type de l'objet enregistr� dans l'ArrayList si on est tout de m�me obliger de faire un cast si la valeur enregistr� est un objet ?

  7. #7
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Toutes les classes de .NET d�rivent (directement ou non) de la classe Object.
    Donc ArrayList peut contenir n'importe quel type .NET
    On est pas oblig� de pr�ciser le Type (Tu le fais toi car c'est une variable litt�rale que tu ins�res et c'est du C++ qui est hybride (.NEt et natif))

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    System::String* s;
    myAL->Add(s);
    Pour utiliser l'�l�ment du tableau, tu es oblig� de caster car pour le compilo, le type d'un elt ArrayList est Object.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    myAL->Item[0].ToLower(); // Erreur de compilation ToLower n'est pas membre de la classe Object
    static_cast<System::String*>(Alist->Item[0]).ToLower(); // ça passe bien

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    ok ok c'est tr�s clair merci


    Sujet clos

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    Un autre probl�me que j'ai depuis un moment

    Dans mon appli je met :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    using namespace System::Windows::Forms;
     
    ...
     
    Messagebox::Show("test", "test");
    L'erreur renvoy�e est :

    MessageBoxA n'est pas un nom de classe ou d'espace de noms

    puis

    System::Windows::Forms::Control::Show : la fonction ne prend pas 2 arguments

    Je pr�cise que je suis en c++ manag� avec Visual Studio 2003

  10. #10
    R�dacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par d�faut
    Citation Envoy� par tidou

    MessageBoxA n'est pas un nom de classe ou d'espace de noms
    MessageBoxA ou MessageBox tout vourt (sans le A) :

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    non mais j'utilise bien MessageBox et PAS MessageBoxA c'est bien ca qui est bizarre

  12. #12
    R�dacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par d�faut
    C'est que quelque par dans ton code, tu as mis MessageBoxA par erreur : dans Visual Studio, double clic sur l'erreur pour atterir directement dessus dans ton code.

  13. #13
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    non non vraiment je n'ai pas mis MessageBoxA lol je ne suis pas encore gateux et je connai bien l'astuce du double clic sur l'erreur pour arriver directement sur la ligne ayant provoquer l'erreur !!!

    il y a bien un "vrai" probl�me ....

  14. #14
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    C'est parce qu'il te manque aussi l'importation de la r�f�rence � l'assembly .NET system.windows.forms.dll
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    #using <system.windows.forms.dll>
    using namespace System::Windows::Forms;
    L'explication pour MessageBoxA.

    Vu qu'il te manquait la reference � la 'assembly windows Forms, et qu'il existe dans Win32 une fonction MessageBox, et que certaines fonctions Win32 qui manipulent les chaines de caract�res sont en fait des Macros qui redirige sur des fonctions diff�rentes selon que tu sois en Unicode o� non, ...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    // déclaration de messageBox dans Win32 ... 
    #ifdef _UNICODE
    #define MessageBox MessageBoxW(.....)
    #else
    #define MessageBox MessageBoxA(.....)
    #endif
    Si tu n'es pas en unicode en C++, MessageBox win32 est en fait MessageBoxA.

    Voil�

  15. #15
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    ok ok merci pour les explications mais je n'arrive toujours pas � le faire fonctionner :-(

    j'ai bien une r�f�rence System.Windows.Forms dans mon projet

    puis j''ai ajout� dans mon fichier CPP

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    #using <system.windows.forms.dll> 
    using namespace System::Windows::Forms;
    puis utilis� MessageBox en faisant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
     MessageBox::Show("test", "test");
    L'erreur renvoy�e est :

    MessageBoxA n'est pas un nom de classe ou d'espace de noms

    puis

    System::Windows::Forms::Control::Show : la fonction ne prend pas 2 arguments

    Les m�mes erreurs qu'auparavant

  16. #16
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    C'est bizarre ton truc, chez moi �a fonctionne
    poste voir toutes tes d�clarations using sur le cpp en question (fais un copier coller stp)
    Sinon essaye
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    System::Windows::Forms::MessageBox("toto", "toto");

  17. #17
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    donc dans Form1.cpp j'ai ceci en using :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #using <system.windows.forms.dll>
    using namespace System::Windows::Forms;
    using namespace monTest; // c est le nom de mon programme 
     
    ...
     
    System::Windows::Forms::MessageBox("toto", "toto");
    Dans les r�f�rences de mon projet j'ai :

    System.Windows.forms
    System.XML
    System.Drawing
    System.Data
    System
    mscorlib

    voila

    est-ce bien ce que tu voulais ?

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    Ouf voici la solution (merci google )

    Il suffisait de mettre

    #undef MessageBox; apr�s le #include <windows.h>

    If you are doing a #include <windows.h", MessageBox is a macro which expands
    to either MessageBoxA or MessageBoxW depending in whether you have UNICODE
    defined. So your MessageBox::Show then expands to MessageBoxA::Show and the
    compiler says correctly there is no MessageBoxA class or namespace in .NET,
    which is correct. As a workaround try an #undef MessageBox after your
    #include <windows.h>
    Voir ici le thread complet :

    http://groups.google.com/groups?hl=en&lr=&newwindow=1&threadm=OPIbQz46DHA.2760%40TK2MSFTNGP09.phx.gbl&rnum=1&prev=/groups%3Fnum%3D100%26hl%3Den%26lr%3D%26newwindow%3D1%26q%3DMessageBoxA%2Bis%2Bnot%2Ba%2Bclass%2Bor%26btnG%3DSearch

    Topic clos, merci � tous pour votre aide je reviendrai sous peu je pense

  19. #19
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [ASP.NET/C#] Tableau dynamique
    Par baptx dans le forum ASP.NET
    R�ponses: 7
    Dernier message: 22/01/2011, 21h00
  2. R�ponses: 1
    Dernier message: 27/05/2008, 11h20
  3. [VB.NET]Tableau dynamique - identation
    Par frankiboy dans le forum ASP.NET
    R�ponses: 5
    Dernier message: 05/03/2008, 00h23
  4. [1.1][vb.net] cr�ation de tableau dynamique
    Par elastoplas dans le forum ASP.NET
    R�ponses: 3
    Dernier message: 01/12/2006, 09h44
  5. [VB.NET] - affichage dynamique dans un tableau
    Par karibouxe dans le forum ASP.NET
    R�ponses: 8
    Dernier message: 20/06/2005, 15h07

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