Partage
  • Partager sur Facebook
  • Partager sur Twitter

Conversion pointeur en tableau

Sujet résolu
    17 novembre 2018 à 10:46:05

    Bonjour les zéros,

    je possède un sous-programme comme ceci en déclaration :

    Competence* RempliOri(Origine t,Competence g[]);

    Ainsi mon sous programme prend en parametre une variable de type Origine et un tableau de variables de type Competence

    Les structures Origine et Competence sont déclarés comme ceci :

    typedef struct Competence
    {
        int niv;
        int appartenance;
        int valeur;
        char* Nom;
        int metier;
    
    }Competence;
     
    typedef struct Origine { int conn; int tech; int mari; int phys; int soci; int comb; char* Nom; char **Metiers; int type; int nbmetier; }Origine;


    Ainsi dans mon main je fais appel à ce sous programme :

     liste=RempliOri(ListeOri[i],liste);

    Dans mon main, ListeOri est un tableau de Origine :

        Origine ListeOri[20]= {{0,1,0,2,2,1,"Amuseurs",Metiers[0],2,3},{1,1,1,1,1,2,"Armee",Metiers[1],2,2},{2,0,0,0,3,0,"Bourgeoisie",Metiers[2],2,7},{0,2,1,3,0,1,"Colons",Metiers[3],2,3},{3,0,1,0,1,0,"Intellectuels",Metiers[4],2,13},{0,0,0,3,1,1,"Malandrins",Metiers[5],2,1},{1,1,3,1,0,0,"Marine",Metiers[6],2,7},{1,0,1,1,3,1,"Noblesse",Metiers[7],2,7},{0,2,0,2,2,0,"Paysannerie",Metiers[8],2,2},{1,1,0,2,1,1,"Tribu",Metiers[9],2,5},{0,0,0,1,3,1,"Amoureuse",Metiers[10],1,1},{0,0,1,1,2,1,"Autoritaire",Metiers[11],1,0},{2,0,0,0,3,0,"Choyee",Metiers[12],1,4},{0,2,1,1,1,1,"Laborieuse",Metiers[13],1},{1,1,0,2,1,1,"Orpheline",Metiers[14],1,1},{1,0,0,0,2,2,"Rebelle",Metiers[15],1,2},{2,1,0,1,1,1,"Solitaire",Metiers[16],1,4},{3,0,2,0,0,0,"Studieuse",Metiers[17],1,10},{1,2,3,1,0,1,"Mer",Metiers[18],1,5},{0,0,0,2,2,1,"Turbulente",Metiers[19],1,1}};
    

    et liste est un tableau de Competence de taille 78 :

     Competence liste[78];

    Que j'initialise comme ceci :

     for(i=0; i<78; i++)
        {
            if(i<17)
                liste[i].appartenance=0;
            else if(i<31)
                liste[i].appartenance=1;
            else if(i<39)
                liste[i].appartenance=2;
            else if(i<47)
                liste[i].appartenance=3;
            else if(i<66)
                liste[i].appartenance=4;
            else if(i<77)
                liste[i].appartenance=5;
            liste[i].valeur=0;
            liste[i].Nom=Noms[i];
            liste[i].metier=0;
        }

    Et lors de l'appel de mon sous programme :

     liste=RempliOri(ListeOri[i],liste);

    J'ai une erreur de type

    C:\Reroll - Copie\main.c|164|error: assignment to expression with array type|

    Pourtant à aucun moment je ne vois pas où je fais des assignements de tableau étant donné que je passe par des pointeurs.

    J'ai vu une réponse à un sujet : https://openclassrooms.com/forum/sujet/assignment-to-expression-with-array-type

    Mais cette personne utilisait des tableaux alors que moi j'utilise des pointeurs :(

    Auriez-vous une piste pour savoir où peut se situer l'erreur ?

    Merci de votre temps de lecture.


    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2018 à 11:55:56

      Bonjour,

      liste est un tableau et un tableau ne peut jamais être à gauche d'un égal.
      Un tableau ne peut pas être transmis en paramètre (il est converti en pointeur sur son premier élément) ni retourné par une fonction.
      Mais un pointeur ne peut pas être converti en tableau.

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        17 novembre 2018 à 15:00:09

        Bonjour,

        effectivement je n'avais pas assez de prise de recul pour détecter ceci, merci encore.

        J'ai aussi modifé mon sous programme comme ceci :

        void RempliOri(Origine t,Competence* g);

        Sujet résolu

        • Partager sur Facebook
        • Partager sur Twitter

        Conversion pointeur en tableau

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown