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

C++Builder Discussion :

Passage d'un tableau � une fonction


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    Par d�faut Passage d'un tableau � une fonction
    Bonjour,

    j'ai un tableau d'AnsiString � 2 dimensions d�clar� comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    AnsiString itemStr[2][500];
    J'aimerai le passer en argument � une fonction.
    Comment dois-je prototyper ma fonction ?
    Que dois-je mettre dans l'appel � cette fonction ?

    Merci

  2. #2
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Il suffit de d�clarer le param�tre de la m�me forme :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     
    int fct(AnsiString param[2][500])
    ou bien
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     
    int fct(AnsiString param[][])
    ou bien
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     
     int fct(AnsiString ** param)

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut
    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
    23
    24
    25
    26
    27
    28
    29
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {           AnsiString **a=new  AnsiString*[3];
    //a[0][
    for(int i=0;i<3;i++) {
     
    		a[i] = new AnsiString[4];
     
    	}
    a[0][1]="e";
    traiter_string(a);
     
    }
    //---------------------------------------------------------------------------
     
     
    TForm1::traiter_string(AnsiString **a)
    {
            //TODO: Add your source code here
     
           ShowMessage("jaffiche le contenu de la chaine [0][1]: "+a[0][1]);
     
    }

    � toi de voire

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut
    j'ai rapidement fais un exemple de matrice de taille [3][4] donc � toi de voire la taille que tu veux.

    n'oublies pas la d�sallocation.

    Good luck.

  5. #5
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    Par d�faut
    J'ai essay� la m�thode avec les [][] mais le compilo me fait un message d'erreur :
    E2453 La taille du type 'AnsiString[]' est inconnue ou z�ro

    J'ai essay� la m�thode avec **, la compil passe pour la fonction mais pas pour l'appel :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    AnsiString mastr[2][500];
    fct(mastr);
    Message d'erreur : E2285 Impossible de trouver une correspondance pour 'fct(AnsiString ( *)[500])'

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut
    Est ce que t'as fais l'initialisation de la matrice avant le passage?

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut
    peux tu poster un bout de code juste pour l'essayer chez moi. pcq mon exemple tourne sur ma machine.

  8. #8
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    Par d�faut
    Code d'initialisation et d'appel de la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AnsiString tabstr[2][MAXPRO];
    int i;
     
    for(i=0;i<preitem;i++)
    {
                    tabstr[0][i]=itemStr[0][i];
                    tabstr[1][i]=itemStr[1][i];
    }
    fct(tabstr);
    Code de la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    __fastcall fct(AnsiString **KS)
        : TForm(Owner)
    {
    //CODE DE LA FONCTION
    }

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut
    Oui,

    Dans la d�claration de ton tabstr[2][MAXPRO]; t'as fix� la taille de la matrice , or dans l'appel de la fonction (AnsiString **KS), c'est des pointeurs pour l'allocation dynamique,
    donc soit:
    1/
    tu d�clares tabstr[2][MAXPRO] ; // dans le .h ajoutes le #define MAXPRO
    la fonction sera fct(AnsiString KS[2][MAXPRO]

    2/ ou:
    tu d�clare comme mon exemple avec des pointeur et tu fais l'allocation dynamique

    donc sa sera: AnsiString **tabstr; // donc la fonction principale
    AnsiString **KS; // pour la fonction � appeler.


    Sa marchera.



    Citation Envoy� par futneguet Voir le message
    Code d'initialisation et d'appel de la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AnsiString tabstr[2][MAXPRO];
    int i;
     
    for(i=0;i<preitem;i++)
    {
                    tabstr[0][i]=itemStr[0][i];
                    tabstr[1][i]=itemStr[1][i];
    }
    fct(tabstr);
    Code de la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    __fastcall fct(AnsiString **KS)
        : TForm(Owner)
    {
    //CODE DE LA FONCTION
    }

  10. #10
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    Par d�faut
    Et quelle est la meilleure solution au niveau de la gestion m�moire ?

  11. #11
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut
    Bien sur en (new **).

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

Discussions similaires

  1. bug lors du passage d'un tableau � une fonction
    Par raplapente dans le forum D�buter
    R�ponses: 4
    Dernier message: 16/09/2009, 14h00
  2. Passage de tableau � une fonction: pb de debugger
    Par Felipe_ dans le forum C++Builder
    R�ponses: 2
    Dernier message: 08/12/2007, 09h26
  3. R�ponses: 11
    Dernier message: 27/06/2007, 15h06
  4. Passage de tableau � une fonction par pointeur
    Par progfou dans le forum C++
    R�ponses: 15
    Dernier message: 23/02/2007, 11h45
  5. R�ponses: 8
    Dernier message: 10/03/2006, 17h28

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