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 :

Appel de fonction


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut Appel de fonction
    Bonjour,

    Je veux intégrer une partie de mon code dans une fonction.

    J'ai d'abord essayé de mettre mon code directement dans le main et tout se passe bien.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <vector>
    #include <stdio.h>
    #include <windows.h>
    #include <iostream>
     
    using namespace std;
     
    int main(void)
    {
        vector<char*> directory_name;
        WIN32_FIND_DATA File;
        HANDLE hSearch;
        int i;
        i=0;
     
        hSearch = FindFirstFile("*.*", &File);
        if (hSearch != INVALID_HANDLE_VALUE)
        {
            do { if (File.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){            
                 //printf("%s\n", File.cFileName);
                 directory_name.push_back(File.cFileName);
                 printf("%s\n",directory_name[i]);}
            } while (FindNextFile(hSearch, &File));
     
            FindClose(hSearch);
        }
        return 0;
    }
    Mais maintenant quand j'essaye de mettre dans une fonction spécifique, je n'arrive même pas à lancer la fonction.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <vector>
    #include <stdio.h>
    #include <windows.h>
    #include <iostream>
     
    using namespace std;
     
    void vector_directory_name (void)
    {
    vector<char*> directory_name;
    WIN32_FIND_DATA File;
    HANDLE hSearch;
    int i;
    i=0;
     
        hSearch = FindFirstFile("*.*", &File);
        if (hSearch != INVALID_HANDLE_VALUE)
        {
            do { if (File.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){            
                 directory_name.push_back(File.cFileName);
                 printf("%s\n",directory_name[i]);}
            } while (FindNextFile(hSearch, &File));
     
            FindClose(hSearch);
        }
    }     
     
    int main(void)
    { 
        vector_directory_name();
        return 0;
    }

    Je suis désolé mais je débute en c++ et j'apprécierai votre aide.

    Merci

    David

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Il n'y a rien qui me choque à première vue.

    À part une chose, je ne suis pas sûr que tu aies le droit de stocker le résultat de File.cFileName --> utilise plutôt un vector<string> pour stocker les chaînes de caractères.

    Qu'entends-tu exactement par "je n'arrive même pas à lancer la fonction" ? Ça ne compile pas ? Ça ne s'exécute pas ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Désole de ne pas être très précis.

    Si ça compile bien, l'exe semble semble fonctionné.

    Mais le printf("%s\n",directory_name[i]) ne s'affiche pas dans ma fenêtre.

    ce qui me fait dire que peut être je n'arrive même pas dans ma fonction.

    David

  4. #4
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Ce n'est pas possible que tu ne rentres pas dans ta fonction .

    Tu peux d'ailleurs le vérifier en mettant un printf("toto"); au début de ta fonction (note, en c++, on préfère cout << "toto"; en ayant inclus l'en-tête <iostream> )

    Ce qui est probable, c'est que tu ne rentres pas dans ta boucle car FindFirstFile ne trouve rien. En effet, File n'est pas initialisé, donc tu dois tomber sur le cas INVALID_HANDLE_VALUE.

    Tu es sous Visual, il y a un mode pas-à-pas que peux lancer (avec F9 il me semble) qui devrait bien t'aider.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Maintenant cela semble fonctionner. Je ne comprends pas trop.

    Par rapport vector<string>. J'ai essayé mais lors de la compilation il me retourne une erreur 31 C:\Dev File\test_repertoire.cpp [Warning] cannot pass objects of non-POD type `struct std::basic_string<char, std::char_traits<char>, std::allocator<char> >' through `...'; call will abort at runtime

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 900
    Points : 1 918
    Points
    1 918
    Par défaut
    std::string a une méthode char* c_str() qui renvoie un pointeur sur une chaîne de caracètre C-style. Donc tu peux stocker des chaînes dans un vector<string>, et utiliser tes fonctions demande un char* avec c_str().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<string> directories;
    MaFonctionQuiPrendUnCharEtoile(directories[3].c_str());
    De même, std::string a un constructeur qui prend un char*, donc tu peux stocker des chaînes C-style dans un vector<string>, il y aura un appel implicite au constructeur de std::string.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<string> directories;
    directories.push_back(File.cFileName()); // Du moins si l'objet ne peut pas renvoyer une std::string.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Attention: c_str() retourne un char const *.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Encore merci pour votre aide.

    Par rapport à l'affichage vaut il mieux utiliser cout ou printf?

    David

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En C++, je dis cout sans hésiter.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Maintenant j'essaye de renvoyer le vector que j'ai crée dans ma fonction vector_directory_name au niveau de mon main.
    Mais je ne vois pas quel types mettre au niveau du prototype de ma fonction pour le retour.

    David

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Merci encore, j'ai trouvé ma réponse.

    David

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

Discussions similaires

  1. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  2. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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