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 :

Pb avec passage de tableau à une fonction par pointeur


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Pb avec passage de tableau à une fonction par pointeur
    Voila mon problème est le suivant: j'ai une fonction qui effectue des opérations sur un tableau. J'ai défini une structure 'pts' qui à tout élément associe un 'x', un 'y' et un 'z' (coordonnées des points). Je veux modifier directement un tableau global dont les éléments sont des points du type 'pts', donc je passe l'adresse du premier élément du tableau en argument à ma fonction. Je fait ma popote et paf ! à la compilation, une vieille erreur au moment de l'appel de la fonction (j'ai défini le prototype avant de l'appeler) ... j'y comprend rien !
    Voici l'extrait du code incriminé :
    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
     
    void translation(pts *tabMesh[], int tailleMesh , pts b)
    {
              for(int i=0; i<= tailleMesh-1; i++)
              {
                      tabMesh[i]->x = tabMesh[i]->x + b.x;
                      tabMesh[i]->y = tabMesh[i]->y + b.y;
                      tabMesh[i]->z = tabMesh[i]->z + b.z;
              }
     
              return;
    }
     
    // Appel de la fonction
    translation(&ptMesh[0], nbPts , v);
    L'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ..\Projection.cpp cannot convert `pts*' to `pts**' for argument `1' to `void translation(pts**, int, pts)'
    Ca doit être relativement basique comme bourde mais malgrés tous les épluchage de tutos faq forum et co j'ai pas trouvé ! A l'aide lol
    Merci d'avance

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void translation(pts *tabMesh[], int tailleMesh , pts b)
    L'erreur se situe ici ...
    Tu n'as pas l'impression qu'il y a un problème par hasard?
    Tu n'as pas l'impression que tu voudrais mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void translation(pts *tabMesh, int tailleMesh , pts b)
    plutôt ?

    EDIT : il me semble en plus que tu peux appeler en mettant tontab au lieu de &tontab[0]

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    En C++ à mon avis il est mieux d'utiliser des objets pour les tableaux comme boost.array.

    Enfin bref, ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void translation(pts *tabMesh[], int tailleMesh , pts b)
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void translation(pts tabMesh[], int tailleMesh , pts b)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void translation(pts *tabMesh, int tailleMesh , pts b)

  4. #4
    Membre averti Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par Alp
    EDIT : il me semble en plus que tu peux appeler en mettant tontab au lieu de &tontab[0]
    Exactement !!

  5. #5
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Si j'en juge par l'écriture : tabMesh est bien un tableau de pointeurs sur pts. Le code de LordProgz est donc correct et il compile d'ailleurs fort bien.

    Par contre, on obtient l'erreur de compilation indiquée en oubliant le "&" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    translation(ptMesh[0], nbPts , v);
    Conclusion : le code que nous voyons n'est probablement pas le code qui a été compilé ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Re: Pb avec passage de tableau à une fonction par pointeur
    Citation Envoyé par LordProgz
    Je veux modifier directement un tableau global [b]dont les éléments sont des points du type 'pts'[b], donc je passe l'adresse du premier élément du tableau en argument à ma fonction

    // Appel de la fonction
    translation(&ptMesh[0], nbPts , v);

    //fonction:
    void translation(pts *tabMesh[], int tailleMesh , pts b)

    implique donc:

    L'erreur : ..\Projection.cpp cannot convert `pts*' to `pts**' for argument `1' to `void translation(pts**, int, pts)'
    "[b]dont les éléments sont des points du type 'pts'[b]"
    c est la le probleme ton tableau d entree contient des pts alors que celui de la fonction contient des pointeur de pts

    donc tu transformes un tableau de pts (pts*) en un tableau de pointeur de pts (pts**), ceci est une erreur d ou le message d erreur

    J ai bon?

  7. #7
    Membre habitué Avatar de Process Linux
    Inscrit en
    Septembre 2003
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 136
    Points : 149
    Points
    149
    Par défaut
    voici le code de ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void translation(pts *tabMesh[], int tailleMesh , pts b) 
    { 
              for(int i=0; i<= tailleMesh-1; i++) 
              { 
                      tabMesh[i]->x = tabMesh[i]->x + b.x; 
                      tabMesh[i]->y = tabMesh[i]->y + b.y; 
                      tabMesh[i]->z = tabMesh[i]->z + b.z; 
              } 
     
              return; 
    }
    la fonction translation attend comme paramètre , un tableau dont les éléments sont des tableau d'élements de type pts.
    donc tu ne passes pas un tableau en paramétre, mais une matrice.

    dans l'appel de fonction tu donnes un tableau en paramétre, alros que la fonction attend une matrice, donc tu as le message claire, c'est qu'il ne peut pas convertir un type pts * à un type pts ** , donc il ne peut pas convertir un tableau à une matrice.

    pour que ton code marche , il faut réecrire la fonction comme suit :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void translation(pts *tabMesh, int tailleMesh , pts b) 
    { 
              for(int i=0; i<= tailleMesh-1; i++) 
              { 
                      tabMesh[i].x = tabMesh[i].x + b.x; 
                      tabMesh[i].y = tabMesh[i].y + b.y; 
                      tabMesh[i].z = tabMesh[i].z + b.z; 
              } 
     
              return; 
    }
    Dans l'execution , il suffit de passer le nom du tableau globale que tu as déclaré, au moment de l'execution, il va duppliquer l'adresse du tableau , mais l'adresse dupliqué va toujours pointer les données, donc la modification va porter effectivement sur les données du tableau que tu as passé en paramètre .

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Merci à tous pour votre aide !
    A première vu je crois que Sakijep et Process Linux ont vu juste.
    J'essaye tout ça de suite et je vous donne des nvelles.
    (en fait c t pas si basique que je pensais)
    Merci bcp à tous

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    C'est tout à fait ça Process Linux ! Ca tourne au poil ! Merci bcp !
    Je comprennais pas comment faire! Je me doutais qu'il y avait une histoire de pointeur mais je n'ai que de courtes notions sur les pointeurs et ça dépassait mes compétences. Mais maintenant je suis sorti d'affaire et je vais devenir un maître des matrices de pointeurs

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

Discussions similaires

  1. Passage de tableau à une fonction Lua en C
    Par astro01 dans le forum C
    Réponses: 4
    Dernier message: 28/05/2015, 10h07
  2. Passage tableau à une fonction
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 12/12/2007, 17h19
  3. Passage de tableau à une fonction: pb de debugger
    Par Felipe_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2007, 09h26
  4. Réponses: 11
    Dernier message: 27/06/2007, 15h06
  5. Passage de tableau à une fonction par pointeur
    Par progfou dans le forum C++
    Réponses: 15
    Dernier message: 23/02/2007, 11h45

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