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 :

retourner un tableau d'une fonction


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut retourner un tableau d'une fonction
    Bonjour,

    j'aimerai pouvoir retourner un tableau d'une fonction mais je galère donc est-ce que vous pouvez m'aider?

    je m'explique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void a::recupValeur()
    {
    String tab[4]={"coucou","je","test","quelquechose"};
    return tab;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void b::affichage()
    {
    a obj;
    String tabValeur=obj.recupValeur();
    // reste du code pour afficher
    }
    je voudrai que tabValeur soit un tableau avec les valeurs de tab.

    Je me doute que c'est uen histoire de pointeurs mais je galère avec.

    Pouvez vous m'aider?

    Merci d'avance

    Nixonne

  2. #2
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut, il faut que tu regardes du côté des pointeurs. Si tu veux que ta fonction retourne un tableau, il faut déjà modifier son prototype (sa déclaration):
    avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void a::recupValeur()
    {
    String tab[4]={"coucou","je","test","quelquechose"};
    return tab;
    }
    après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int a::recupValeur()
    {
    String tab[4]={"coucou","je","test","quelquechose"};
    return tab[0];
    }
    Ensuite tu retournes l'adresse du premier élément de ton tableau (donc son adresse).
    Jette un oeil sur le tuto sur les pointeurs.
    Tu comprendras mieux comment récupérer les données.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void a::recupValeur()
    {
    String tab[4]={"coucou","je","test","quelquechose"};
    return tab;
    }
    Erreur (classique): la fonction retourne l'adresse d'une variable locale (tab) qui est détruite à la sortie de la fonction. On a donc l'adresse d'un tableau qui n'existe PLUS. Incohérence : la fonction est déclarée renvoyer void et retourne String*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void b::affichage()
    {
    a obj;
    String tabValeur=obj.recupValeur();
    // reste du code pour afficher
    }
    Incohérent : recupValeur renvoie (normalement) un String * , pas un String
    bandit boy propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int a::recupValeur()
    {
    String tab[4]={"coucou","je","test","quelquechose"};
    return tab[0];
    }
    Incohérent : tab[0] est un String , pas un int
    Ensuite tu retournes l'adresse du premier élément de ton tableau (donc son adresse).
    Ensuite, tu ne peux rien retourner puisque tu as quitté la fonction
    Problème de nixonne
    j'aimerai pouvoir retourner un tableau d'une fonction
    Pas beaucoup de choix : Ou le tableau est créé à l'extérieur de la fonction puis passé en paramètre à la fonction qui le manipule, ou il est créé de façon dynamique dans la fonction qui le manipule et renvoie l'adresse du tableau qu'elle a créé. (je m'épargne d'envisager le cas des variables globales ou static)

  4. #4
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    pardon,
    c'est vrai que je renvoie un int, il faut donc return &tab; à la place.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    merci de votre aide maintenant ca marche

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    bandit boy dit :
    c'est vrai que je renvoie un int, il faut donc return &tab; à la place.
    Ceci est tout aussi incorrect : l'adresse d'un qqchose n'est pas un int mais un qqchose *. De plus, dans le cas présent, tab étant un tableau, tab est une adresse et &tab est iincorrect d'un point de vue du type. De plus, tab est local et espérer renvoyer l'adresse d'une variable locale aboutit toujours à une catastrophe

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

Discussions similaires

  1. [XL-2003] Retourner un tableau d'une fonction
    Par thorg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/09/2010, 13h42
  2. [MySQL] Retourner un tableau par une fonction
    Par te-san dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2009, 16h26
  3. [Tableau] Créer une fonction qui retourne un tableau
    Par Imageek dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/01/2009, 16h54
  4. Retourner un tableau dans une fonction
    Par oranoutan dans le forum Débuter
    Réponses: 14
    Dernier message: 05/10/2007, 13h39
  5. Retourner un tableau depuis une fonction
    Par obalais dans le forum C++
    Réponses: 2
    Dernier message: 20/10/2005, 16h49

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