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++ Discussion :

problème avec tableau dynamique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 54
    Par défaut problème avec tableau dynamique
    Vu que les tableaux à deux dimensions sont nuls à utiliser dans la mesure où il faut connaître ses dimensions pour qu'il soit paramètre de fonction, j'ai utilisé un tableau dynamique de tableaux dynamiques.

    voici un bout du code : qui simule un tableau 5x5 pour faire des tests
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    std::vector<std::vector<int>> tableau;
     tableau.resize(5);
     tableau[0].resize(5);
     tableau[1].resize(5);
     tableau[2].resize(5);
     tableau[3].resize(5);
     tableau[4].resize(5);
     
    ... j'initialise les 25 cases de mon tableau
     
    //j'appelle une méthode récursive qui prend mon tableau pour le modifier
    Contamination::contamine(2,2,tableau);
    voici l'entête de ma fonction contamine :

    void contamine(int x, int y, std::vector<std::vector<int>> populus);

    cependant une fois que ma fonction est terminée, si j'affiche mon tableau, il n'a pas pris en compte les modifications apportées dans la fonction, j'ai en fait le tableau du départ.

    Alors je suppose qu'il faut utiliser un pointeur sur le tableau mais j'y arrive pas j'ai un peu tout essayer, si vous pouviez m'aider

    merci

  2. #2
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    Tu as raison il faut utiliser un pointeur (ou une référence). Ce qui se passe dans ton cas c'est qu'une copie du tableau est créée à l'entrée de ta fonction, c'est cette copie qui est modifiée dans la fonction, et détruite à la sortie. Bilan des courses : l'original n'est pas modifié.

    Pour utiliser un pointeur ta fonction devra avoir un prototype du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void contamine(int x, int y, std::vector<std::vector<int>> *populus);
    Puis à l'intérieur de ta fonction il faudra utiliser la valeur pointée au lieu du pointeur lui-même : (*populus)[i], ou populus->size() par exemple.

    Pour la solution de la référence le prototype devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void contamine(int x, int y, std::vector<std::vector<int>>& populus);
    Et le code de ta fonction ne change pas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 54
    Par défaut
    j'ai vraiment du mal là !

    dans mon .h je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void contamine(int x, int y, std::vector<std::vector<int>>& populus);
    dans le .cpp de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void Contamination::contamine(int x, int y, std::vector<std::vector<int>>& populus, int ln1, int ln2) {...} //et je ne change rien au code
    mais au moment où je l'appelle je fais quoi ? je déclare mon tableau de la même manière qu'avant ?, comment je dois l'appeller ?

    merci d'avance, c'est pas facile de passer du java au C++

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    L'appel ne change pas, rien de particulier à ajouter ou modifier.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 54
    Par défaut
    mais ça compile pas des masses en laissant tel quel l'appel...

  6. #6
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    Il faudrait voir le prototype de ta fonction et la ligne d'appel pour y voir plus clair

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/01/2012, 17h12
  2. Réponses: 2
    Dernier message: 10/12/2006, 09h57
  3. [MySQL] [BDD] Problème avec SELECT "dynamique"
    Par Vecine dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/03/2006, 11h11
  4. Problème avec tableaux dynamiques et procédure
    Par K20 dans le forum Langage
    Réponses: 11
    Dernier message: 06/01/2006, 20h51
  5. problème avec tableau
    Par Kerod dans le forum C
    Réponses: 7
    Dernier message: 13/12/2005, 13h27

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