Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction renvoyant un tableau

    6 décembre 2006 à 13:50:38

    Bonjour à tous,

    Quelle est la syntaxe pour définir une fonction qui crée et renvoie un tableau de structures ? Et comment puis-je définir mon tableau de structures ?

    Est-ce :
    struc MaStructure[](arguments){ //correct ?
    struc MaStructure MonTableau[N]; //définition du tableau de structures correcte ?
    ...
    return(MonTableau)
    }


    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      6 décembre 2006 à 13:54:58

      struct TaStruct[] taFonction(parametres)
      {
      // ton code
      }
      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2006 à 14:27:41

        Alors pour être plus précis, voilà ce que je fais :

        définition de la fonction :
        struct USER[] init_location(int Nusers){...}

        définition du tableau de structure dans cette fonction :
        struct USER[Nusers] UserArray;

        renvoi de la fonction :
        return(UserArray);


        Et bien je peux vous dire qu'il apprécie pas mon ptit visual C++...
        • Partager sur Facebook
        • Partager sur Twitter
          6 décembre 2006 à 14:59:27

          salut !

          poste un code complet et les erreurs du compilo pour qu'on puisse t'aider :)
          • Partager sur Facebook
          • Partager sur Twitter
            6 décembre 2006 à 15:12:53

            Voici le code :
            USER[] init_location(int Nusers) //voir 1
            {
                    int i=0;
                    USER UserArray[Nusers];    //voir 2

                    for (i=0;i<=Nusers-1;i++)
                    {
                            UserArray[i].X = (((float)rand() * (XMAX - XMIN + 1))/(RAND_MAX+1)) + XMIN;
                            UserArray[i].Y = (((float)rand() * (YMAX - YMIN + 1))/(RAND_MAX+1)) + YMIN;
                    }

                    return(UserArray); //voir 3
            }

            Avec bien sûr dans mon .h :
            typedef struct{
                                    float   X;    
                                    float   Y;    
                                    float   S;    
                                    }USER;
            USER[] init_location(int Nusers);



            Rien qu'en 1 j'ai :
            ..\Mobility.cpp(8) : error C2143: syntax error : missing ';' before '['
            ..\Mobility.cpp(8) : error C3409: empty attribute block is not allowed
            ..\Mobility.cpp(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
            Bien sur, pour la premiere erreur, j'ai pas oublié de ; ...

            En 2, très drôle car il me semble que la taille est Nusers, non ? :
            error C2133: 'UserArray' : unknown size


            Ne parlons pas de 3 :
            error C2440: 'return' : cannot convert from 'USER []' to 'int'

            N'ai-je pourtant pas correctement déclaré ma fonction ?

            Bref toute une série d'erreurs (car ce ne sont pas les seules), qui me font penser que je déclare mal soit ma fonction, soit le tableau de structures.

            Merci d'avance.


            • Partager sur Facebook
            • Partager sur Twitter
              6 décembre 2006 à 15:45:23

              Tu inclues bien le header dans le .cpp ?

              [edit : hmm pourquoi .cpp ? Je vois pas l'intérêt de compiler en C++ du code C...]
              • Partager sur Facebook
              • Partager sur Twitter
                6 décembre 2006 à 15:48:48

                Oui j'ai inclus le header (rque :le C++viendra +tard).

                Sinon, pour l'erreur 2 : tuto de Matéos : "il est interdit en C de créer un tableau en indiquant sa taille à l'aide d'une variable".

                Enfin bon il reste les autres erreurs...
                • Partager sur Facebook
                • Partager sur Twitter
                  6 décembre 2006 à 15:56:28

                  Ceci marche :

                  test.h


                  #ifndef TEST_H
                  #define TEST_H

                  #include <stdlib.h>

                  #define XMAX 42
                  #define XMIN 12
                  #define YMAX 42
                  #define YMIN 12

                  typedef struct{
                      float   X;
                      float   Y;
                  } USER;

                  USER *init_location(int Nusers);

                  #endif


                  test.c


                  #include "test.h"

                  USER *init_location(int Nusers) //voir 1
                  {
                      int i=0;
                      USER UserArray[Nusers];    //voir 2

                      for (i=0;i<=Nusers-1;i++)
                      {
                          UserArray[i].X = (((float)rand() * (XMAX - XMIN + 1))/(RAND_MAX+1))
                              + XMIN;
                          UserArray[i].Y = (((float)rand() * (YMAX - YMIN + 1))/(RAND_MAX+1))
                              + YMIN;
                      }

                      return UserArray; //voir 3
                  }


                  Par "marche" je veux dire "compile", car les warnings suivants sont à corriger immédiatement (ton code plantera à l'exécution) :
                  test.c: Dans la fonction « init_location »:
                  test.c:10: attention : cast does not match function type
                  test.c:10: attention : integer overflow in expression
                  test.c:12: attention : cast does not match function type
                  test.c:12: attention : integer overflow in expression
                  test.c:16: attention : function returns address of local variable

                  Et bien sûr, tu ne dois pas utiliser une variable pour spécifier la taille de ton tableau statique !!!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 décembre 2006 à 16:13:39

                    Citation : poukram

                    Quelle est la syntaxe pour définir une fonction qui crée et renvoie un tableau de structures ? Et comment puis-je définir mon tableau de structures ?

                    Est-ce :

                    struc MaStructure[](arguments){ //correct ?
                    struc MaStructure MonTableau[N]; //définition du tableau de structures correcte ?
                    ...
                    return(MonTableau)
                    }



                    Non. Bien que ce soit techniquement possible, retourner l'adresse d'un objet local n'a pas de sens, puisque la durée de vie de celui-ci est limitée à l'exécution de la fonction.

                    L'adresse étant invalide, son déréférencement provoque un comportement indéfini.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !

                    Fonction renvoyant un 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