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 :

pb avec numeric_limits


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut pb avec numeric_limits
    Bonjour,

    J'ai le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::numeric_limits<short> info;
    int max = info.max();
    //int max = (int)info.max();
    et l'erreur:

    error C2059: syntax error : '('
    Quel est le probleme ?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Ce code est légal, à condition d'avoir inclus <limits>, mais on préfère écrire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int max = std::numeric_limits<short>::max();

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    J'ai deja essayé cette syntaxe. <limits> est bien inclu, j'ai la completion, mais en ecrivant la ligne que tu donne j'ai 2 erreurs de compil sous vc++exp:

    syntax error : '::'
    '(' : illegal token on right side of '::'

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Le problème doit-être que Microsoft défini une macro dont le nom est "max" dans un de ses headers et qui génère un conflit ici. Solution : ajouterou enlèver le header en question (<windows.h> may be).

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu peux aussi définir NOMINMAX avant d'inclure <windows.h>.

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Exact, un #undef de max et min dans la fonction resoud le probleme.

    Pour NOMINMAX je n'inclu pas windows.h dans mon code, par contre il inclut des librairies qui peuvent elles inclure Windows.h..

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par NiamorH
    Pour NOMINMAX je n'inclu pas windows.h dans mon code, par contre il inclut des librairies qui peuvent elles inclure Windows.h..
    Peu importe, du moment que c'est fait avant ces inclusions. Voire même dans les options du préprocesseur directement.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Par défaut
    Bonjour,

    Pour info la méthode "standard" préconisée par Boost est de wrapper le nom de la méthode avec des parenthèses pour montrer au compilo que ce n'est pas d'une macro qu'on est en train de lui parler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int max = (std::numeric_limits<short>::max)();
    De cette façon on ne détruit pas les définitions de macros existantes à coup de #define et #undef.

    Petite discussion à ce propos sur la mailing list de Boost:
    http://lists.boost.org/Archives/boos.../06/106454.php

    a+

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

Discussions similaires

  1. étendre numeric_limits avec un type perso
    Par CedricMocquillon dans le forum C++
    Réponses: 2
    Dernier message: 29/06/2009, 09h21
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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