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 :

Des parenthèse pas inutiles


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 28
    Points : 21
    Points
    21
    Par défaut Des parenthèse pas inutiles
    Bonjour à tous!

    Étant donné le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <iterator>
    
    int main ()
    {
       std::ifstream In ( "MonFichier.txt" );
       std::string MaChaine ( std::istreambuf_iterator<char>( In ), (std::istreambuf_iterator<char>()) );
       std::cout << MaChaine;
    }
    Si on enlève les parenthèses qui entourent "std::istreambuf_iterator<char>()". Avec Visual C++ 2005, il y a une erreur à l'éditeur de liens:
    error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl MaChaine(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> > (__cdecl*)(void))" (?MaChaine@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std @@V?$istreambuf_iterator@DU?$char_traits@D@std@@@2@P6A?AV32@XZ@Z)
    Avec gcc, ça passe à la compilation, avec un warning (je ne l'ai pas avec moi présentement), mais le programme ne fait pas du tout le résultat attendu par celui-ci.


    Comment cela se fait-il que les parenthèses, qui entourent "std::istreambuf_iterator<char>()", ne sont pas facultatives?


    Merci,
    Mathieu

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Sans les parentheses, tu declares une fonction plutot que de definir une variable. Exemple plus simple du meme probleme:

    declare une fonction x sans parametre retournant un std::string et ne defini pas une variable x initialisee avec le contructeur par defaut.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Est-ce qu'on pourrait dire que c'est une "patch" pour le compilateur ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Non.
    Boost ftw

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Je comprends ce qu'a dit Jean-Marc.Bourguet. Par contre, ce que je veux dire, c'est que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::istreambuf_iterator<char>()
    veut dire que je déclare une fonction, et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (std::istreambuf_iterator<char>())
    veut dire que je me déclare un itérateur.

    C'est dans le standard C++, ou simplement une syntaxe pour aider les compilateurs ?

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par mat087
    C'est dans le standard C++?
    Oui
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Et bien je vous remercie tous!

  8. #8
    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
    Cela me parait bizarre, car il n'y a pas ici de nom de variable.

    Il n'est pas question ici de : mais de :
    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.

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int f(int);
    int f(int x);
    int f(int (x));
    int f(int ());
    4 fois la meme chose.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

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

Discussions similaires

  1. [Plugin] Mise en évidence des (parenthèse) et {accolade}
    Par LLaumgui dans le forum Eclipse Java
    Réponses: 10
    Dernier message: 24/06/2013, 09h28
  2. [RANDOM] Des chiffres pas si aléatoires que ca...
    Par djsbens dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 16/03/2006, 12h22
  3. [Lisp] Suppression des parenthèses dans une liste
    Par bourdaillet dans le forum Lisp
    Réponses: 3
    Dernier message: 19/12/2004, 21h02
  4. Des déformations pas jolie lors du deplacement de la cam
    Par scorpiwolf dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/11/2002, 13h12
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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