Partage
  • Partager sur Facebook
  • Partager sur Twitter

passer un fichier dans les paramètres d'une fct

Sujet résolu
    21 novembre 2017 à 13:37:45

    Salut tout le monde !!

    J'ai un petit problème concernant une fonction qui reçoit un fichier texte et l'ouvre à laide d'un flux , puis il stocke chaque ligne dans un tableau dynamique .

    j'ai essayer le code suivant dans les headers pour ma fonction , notant que j'ai bien inclus les bibliothèques necessaires

    voilà ma fonction

    vector<string> Mappingtoset(string const Fichier)

    {

        ifstream Flux(Fichier.c_str());

        vector<string> T(1);

        int i=0;

        while(getline(Flux,T[i]))

        {

            T.push_back("");

            i++;

        }

        T.pop_back();

        return T;

    }

    dans mon programme principale j'appelle la fonction comme suit :

    int main()

    {

        vector<string> T();

        string const Fichier("C:/Users/Chouaib-ING/Desktop");

        T=Mappingtoset(Fichier);

       }


    Or , il me donne un erreur qui me paraît dans les paramètres de la fct ( le fichier ) 

    beeh je me suis bloqué là 

    merci de votre aimable astuce ou aide !!

    • Partager sur Facebook
    • Partager sur Twitter
      21 novembre 2017 à 14:23:03

      Message d'erreur SVP.

      Pourquoi des passages par valeur et non par référence ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        21 novembre 2017 à 15:29:31

          

        j'ai pas bien compris ta réponse

        mais le voilà au dessus le message d'erreur 

        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2017 à 15:35:56

              vector<string> T();

          a remplacer par

              std::vector<std::string> T{};

          Et donnez les message d'erreur complets, pas une copie d'écran, ainsi que les lignes correspondant aux numéros de ligne indiqués dans les messages d'erreurs.

          std::vector<std::string> Mappingtoset(const std::string&  fichier)



          -
          Edité par bacelar 21 novembre 2017 à 15:36:23

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            21 novembre 2017 à 15:49:07

            Pourquoi ne pas tout simplement créer une string tampon pour stocker la ligne et l'ajouter à ton vector :

            std::string buf;
            while (std::getline(Flux, buf)){
               T.push_back(buf);
            }

            Et retourner un std::vector c'est pas top... Il vaudrait mieux que tu le prenne en référence dans ta fonction et tu fait un clear pour le réinitialiser (ça pourrait engendrer des copies de données inutiles, à vérifier) :

            void Mappingtoset(std::string const& fichier, std::vector<std::string> &T){
               T.clear();
               //la suite de ta fonction
            }




            • Partager sur Facebook
            • Partager sur Twitter
              21 novembre 2017 à 16:07:12

              Tu nous aides pas, on voudrait voir le message d'erreur entier, là il est coupé au milieu et d'ailleurs le chemin que tu donnes est un dossier donc ça générera une erreur à l’exécution.
              • Partager sur Facebook
              • Partager sur Twitter
                21 novembre 2017 à 16:17:07

                non je l'ai modifié , les erreurs occupent tout l'écran , je sais pas comment les copier

                si j'aurai une méthode simple pour passer un fichier dans les arguments d'une fonction je peux résoudre tout les autres problèmes

                • Partager sur Facebook
                • Partager sur Twitter
                  21 novembre 2017 à 16:22:27

                  @ArthurB3: Aucun problème pour retourner le vector, le compilateur utilisera le NRVO ou la sémantique de déplacement pour éviter la copie du vector. A la limite c'est même plus propre, tu n'as pas à le pré-déclarer dans le main, pas besoin non plus de le vider dans la fonction.

                  int main()
                  {
                     auto v = Mappingtoset("C:/users/toto/myfile.txt");
                     afficher(v);
                     return 0;
                  }



                  • Partager sur Facebook
                  • Partager sur Twitter
                  Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                    21 novembre 2017 à 16:26:22

                    ça pas marcher

                    C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.h||In function 'void afficher(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)':|

                    C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.h|19|warning: comparison between signed and unsigned integer expressions|

                    C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.h||In function 'std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > supprligne(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, int)':|

                    C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.h|25|warning: comparison between signed and unsigned integer expressions|

                    C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.cpp||In function 'int main()':|

                    C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.cpp|32|error: conversion from 'const std::string*' to non-scalar type 'std::string' requested|

                    ||=== Build finished: 1 errors, 2 warnings ===|

                    Pouvez vous m'expliquer ces msgs d'erreurs au dessus???



                    sans l'affichage

                    voilà la fonction et l main

                    using namespace std;

                    std::vector<std::string> Mappingtoset(const std::string Fichier)

                    {

                        ifstream Flux(Fichier.c_str());

                        std::vector<std::string> T(1);

                        int i=0;

                        while(getline(Flux,T[i]))

                        {

                            T.push_back("");

                            i++;

                        }

                        T.pop_back();

                        return T;

                    }

                    int main()

                    {

                        vector<string> T();

                        const string Fichier("C:/Users/Chouaib-ING/Desktop/txt.txt");

                        T=Mappingtoset(&Fichier);

                         // fonction déja déclaré dans set.h qui sert à afficher les éléments d'un tableau

                    }



                    -
                    Edité par ChouaibElmakhlouk 21 novembre 2017 à 16:29:33

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 novembre 2017 à 16:30:53


                      Pour copier les erreurs -> build log -> tu copies ce qui est en rouge (je crois) et tu le colles.

                      Pour le passage du nom de fichier tu as fait une petite confusion sur l'operateur &:

                      &variable signifie "pointeur sur variable"

                      std::string& est une reference sur une std::string et pour passer un argument comme ça à ta fonction tu as juste à faire:

                      void maFonction(std::string& str);//pas de definition c'est juste pour l'exemple
                      int main(){
                         std::string a;
                         maFonction(a) //correct le compilateur se charge de creer la reference
                         maFonction(&a) //incorrect tu lui donne une std::string* donc le compilateur genere une erreur du genre "cannot bind lvalue to..." pour gcc
                         return 0;
                      }

                      ChouaibElmakhlouk a écrit:

                      ça pas marcher

                      C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.cpp||In function 'int main()':|

                      C:\Users\Chouaib-ING\Desktop\Projet\Algorithme naive\algorithmeNaive\set.cpp|32|error: conversion from 'const std::string*' to non-scalar type 'std::string' requested|

                      ||=== Build finished: 1 errors, 2 warnings ===|

                      L'erreur que je t'ai expliqué plus haut. Le reste ce sont des warnings des simples conversions entre un entier signé et un entier non signé.

                      -
                      Edité par ArthurB3 21 novembre 2017 à 16:36:01

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 novembre 2017 à 16:35:16

                        sans l'affichage

                        voilà la fonction et l main

                        using namespace std;

                        std::vector<std::string> Mappingtoset(const std::string Fichier)

                        {

                            ifstream Flux(Fichier.c_str());

                            std::vector<std::string> T(1);

                            int i=0;

                            while(getline(Flux,T[i]))

                            {

                                T.push_back("");

                                i++;

                            }

                            T.pop_back();

                            return T;

                        }

                        int main()

                        {

                            vector<string> T();

                            const string Fichier("C:/Users/Chouaib-ING/Desktop/txt.txt");

                            T=Mappingtoset(&Fichier);

                             // fonction déja déclaré dans set.h qui sert à afficher les éléments d'un tableau

                        }

                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 novembre 2017 à 16:43:18

                          Je te conseille de relire les messages depuis le début et de faire les modifs parce que ta fonction est toujours la meme et redemande de l'aide si tu comprends pas certains trucs.

                          Ah, et s'il te plait utilise les balises de code c'est beaucoup plus agréable à lire...

                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 novembre 2017 à 16:44:59

                            telecharge tout le dossier pour bien comprendre mon problème

                            http://www.filehosting.org/file/details/708885/algorithmeNaive.rar

                            je suis débutant ici , je ne sait pas ou je trouve ça

                            mais s'il vous est ce que tu peux me donner ton gmail pour t'envoyer le projet tout entier 

                            j'ai fait toutes le modifications que vous avez cité , mais il y a tjrs des messages d'erreurs

                            -
                            Edité par ChouaibElmakhlouk 21 novembre 2017 à 16:47:50

                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 novembre 2017 à 17:20:30

                              J'ai regardé et le problème c'est l'erreur que t'avais donné bacelar :

                              quand tu écris :

                              vector<string> T();

                              le compilateur croit que tu déclares une fonction donc pour le compilateur tu essaies de donner à une fonction la valeur d'un vector -> ça génère une erreur.

                              Il faut écrire :

                              vector<string> T;
                              //ou
                              vector<string> T{};
                              Et là ton problème devrait être résolu :D

                              -
                              Edité par ArthurB3 21 novembre 2017 à 17:20:58

                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 novembre 2017 à 18:18:04

                                Et merciiiii bcp , 

                                ça marche maintenant ms sans les accolades {}

                                vector<string> T; 

                                ça marche bien comme ça

                                Ouuuff quel petit problème , j'ai resté depuis 10h bloqué à ce point .. 

                                Wooow merci infiniment !!

                                -
                                Edité par ChouaibElmakhlouk 21 novembre 2017 à 18:35:02

                                • Partager sur Facebook
                                • Partager sur Twitter

                                passer un fichier dans les paramètres d'une fct

                                × 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