Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vecteur a l exterieur du main

Sujet résolu
    8 octobre 2007 à 12:06:53

    Bonjour,

    J'ai créer un vecteur v1 dans le main, et je n'arrive pas a l utiliser dans une fonction exterieur au main.

    création du vecteur:

    1. vector<float> v1;


    commande a l interieur d un fonction:

    1. v1.push_back( Variable )


    ca me renvoie comme erreur:

    Citation :

    error C2065: 'v1' : undeclared identifier



    (je travail avec Visual C++)


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      8 octobre 2007 à 12:11:12

      Tu l'a passé en paramètre à la fonction? SI c'est pas le cas ça ne marchera jamais.
      • Partager sur Facebook
      • Partager sur Twitter
        8 octobre 2007 à 12:13:30

        Sans un peut plus de code , je peux rien te dire ^^

        Ton vecteur il est crée ou ?

        1. int foo (void){
        2. std::vector<int> v1; // v1 a une porté limité a foo !! tu ne peut pas t en servire autre part !!
        3. return 0;
        4. }
        5. int bar(void){
        6. v1.push_back( Variable ); // Ici il y aura une erreur
        7. return 0;
        8. }
        • Partager sur Facebook
        • Partager sur Twitter
          8 octobre 2007 à 12:27:07

          J vais pas donner tout mon code, ca serait impossible a comprendre (programme de 50 pages...)

          En gros j ai une fonction qui prend 15 paramètres, qui fais un calcul avec ces parametres, et je veux que le résultat soit ajouté a la fin du vecteur v1, précédament créé dans main.
          (la fonction est répetée 20 fois, avec des paramètres différents, donc je peux pas créer mon vecteur dans ma fonction).


          hiura, t entends quoi par "passer en paramètre"?
          • Partager sur Facebook
          • Partager sur Twitter
            8 octobre 2007 à 12:33:15

            1. void fonc()
            2. {
            3.   // impossible de piloter v1 d'ici
            4. }
            5. int main()
            6. {
            7.   std::vecteur<int> v1;
            8.   fonc();
            9. }


            1. void fonc(std::vector<int>& v1)
            2. {
            3.   // v1 accessible
            4. }
            5. int main()
            6. {
            7.   std::vecteur v1;
            8.   fonc(v1);
            9. }
            • Partager sur Facebook
            • Partager sur Twitter

            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

              8 octobre 2007 à 12:37:15

              1. #include <iostream>
              2. #include <vector>
              3. int foobar(int a, int b, int c){
              4. v1.push_back( a+b+c ); // ne compilra pas !! v1 n 'est pas déclarré  dans foobar.
              5. }
              6. int main (int argc, char * argv[]){
              7. int a = 1;
              8. int b = 2;
              9. int c = 3;
              10. std::vector<int> v1;
              11. foobar(a ,b ,c);
              12. return 0;
              13. }


              Quand hiura te dis de le passé en paramettre c' est qu' il que la fonction foobar soit ( par example !! ) foobar(int a, int b, int c, std::vector &v1)

              Apres je ne te demande pas 50 page de code :) Mais juste le necessaire ( par exemple la fonction , ou meme juste son prototype ) avec son appel !!


              Cettte erreur "error C2065: 'v1' : undeclared identifier" veux dire que v1 n' existe pas, soit car il n' a jamais existé soit car tu l' appelle d' un n' endroit ou elle n' a jamais existé ( les variable on differente porté !! )
              • Partager sur Facebook
              • Partager sur Twitter
                8 octobre 2007 à 12:52:31

                voici la forme de mon programme:

                1. #include <iostream>
                2. #include <math.h>
                3. #include <vector>
                4. #include <stdio.h>
                5. //déclaration de variables
                6. using namespace std;
                7. int main()
                8.         {
                9. float Intersection(float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&); //déclaration de la fonction avec 15 arguments.
                10. cin>>A1;
                11. cin>>A2;
                12. ...
                13. cin>>A15;
                14. vector<float> v1;
                15. Intersection(A1, A2, A3, ... ,A15);
                16. Intersection(A8, A3, A12, ... );
                17. //la fonction est éxécutée une 20aine de fois, avec a chaque fois des arguments différents
                18. return 0;
                19. }
                20. float Intersection(float& Point1, float& Point2, ... , float& Point15)
                21.     {
                22.        //calculs
                23. v1.push_back(Réponse du calcul);
                24. return v1;
                25.     }
                • Partager sur Facebook
                • Partager sur Twitter
                  8 octobre 2007 à 12:54:01

                  tu postes ton code sans prendre la peine de lire ce que je t'ai marqué plus haut, qui répond exactement a ton probleme, je trouve ça un peu vexant...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    8 octobre 2007 à 12:57:05

                    Excuse moi, j ai pas répondu aux suggestions.

                    Pour ta solution, j ai essayé, mais je vois pas exactement comment gerer le std::vector<int>& v1 par rapport aux autres arguments. Enfin, pourrais tu m illustrer la facon de faire avec l exemple que j ai fournis?

                    Merci d avance
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      8 octobre 2007 à 13:10:47

                      Demande encore qu'on te fasse ton travaille. Je compte trois personnes qui te disent la même chose : fait passer en paramètre. Ensuite Fvirtman (lien vers le post) t'a donner la solution ; il suffit que tu l'appliques à ton code! Tu dis avoir fait un programme de 50 pages et tu ne sais pas faire une simple modification d'un exemple à ton problème : j'ose pas imaginer comme il est ton code.

                      PS :
                      il y a un faute dans ton code : tu ne peux pas déclarer de fonction dans une fonction.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 octobre 2007 à 13:14:07

                        std::vector<int>& v1 est une reference sur le vecteur v1 te permettant de l' utilisé dans tes fonctions.

                        On viens de te dire 3 fois pourquoi ça ne marche pas !!

                        Si tu as fais un code de 50 pages et que tu ne connais meme pas la porté des variables , arrêtes toi tout de suite !! Va trouver un bon tuto sur le langage C++ et (re)lis le !!

                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 octobre 2007 à 13:17:38

                          J'ai mis mon vecteur en argument, y la fonction reconnait le vecteur, mais un probleme persiste avec l opération push_back.

                          Citation :

                          error C2228: left of '.push_back' must have class/struct/union type

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 octobre 2007 à 13:28:35

                            Avec l exemple d avant, ca donne:

                            1. #include <iostream>
                            2. #include <math.h>
                            3. #include <vector>
                            4. #include <stdio.h>
                            5. //déclaration de variables
                            6. using namespace std;
                            7. int main()
                            8.         {
                            9. float Intersection(float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, float&, vector<float> v1)
                            10. //déclaration de la fonction avec 15 arguments.
                            11. cin>>A1;
                            12. cin>>A2;
                            13. ...
                            14. cin>>A15;
                            15. vector<float> v1;
                            16. Intersection(A1, A2, A3, ... ,A15, v1)
                            17. Intersection(A8, A3, A12, ... , v1)
                            18. //la fonction est éxécutée une 20aine de fois, avec a chaque fois des arguments différents
                            19. return 0;
                            20. }
                            21. float Intersection(float& Point1, float& Point2, ... , float& Point15, float v1)    {
                            22.        //calculs
                            23. v1.push_back(Réponse du calcul);
                            24. return v1;
                            25.     }



                            edit: visiblement on peut pas mettre en gras a l interieur d'une quote.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 octobre 2007 à 13:36:23

                              T'as un peu de mal on dirait avec le C++.

                              Fais quelque chose, relis un tuto...

                              Ici il faut passer un vector<float>, non un float:

                              1. float Intersection(float& Point1, float& Point2, ... , float& Point15, vector<float>& v1)
                              2. {
                              3.    v1.push_back(Réponse du calcul);
                              4. ...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 octobre 2007 à 13:39:34

                                rhalala, ca va mal aujourd hui :p

                                Ok, merci, ca joue maintenant.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  8 octobre 2007 à 13:41:24

                                  Sois plus attentif : tu donne une définition différente à la déclaration. Si tu relis le code proposé par Fvirtman tu verras un '&' bien significatif.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    8 octobre 2007 à 13:48:13

                                    Oui, je l ai mis dans mon code, mais oublié dans la quote ci dessus.
                                    Bon, merci a vous 4, bonne journée
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      8 octobre 2007 à 13:50:28

                                      Il est important de comprendre les messages d'erreurs donnés par le compilateur, pour bien comprendre pourquoi ça ne va pas :)

                                      La compilation, c'est un dialogue avec le compilateur, et - bien entendu, quand on débute, on ne comprend pas tout et c'est normal - mais il est important de bien le comprenre par la suite pour réussir a tout corriger :)
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                      Vecteur a l exterieur du main

                                      × 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