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

Visual C++ Discussion :

visual confond les bool et les int


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut visual confond les bool et les int
    Bonjour a tous.

    Il m'arrive un truc cocasse. je programme en C++ sur visual 2005.
    je crée une fonction qui retourne un bool
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool myFunc()
    {
      return true;
    }
    je l'appelle (sans même recuperer la valeur de retour)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
    myFunc();
    return 0;
    }
    et au linkage, visual me retourne une erreur:
    unresolved external symbol "int _cdecl myFunc(void)" blablabla
    Si je change ma fonction pour qu'elle retourne un int:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int myFunc()
    {
      return true;
    }
    Il y a plus de problème...

    J'imagine qu'il y a un truc bizarre dans mes options de projet mais je sais pas quoi. Quelqu'un a une idée? merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Salut,
    T'es sur que tu fais pas du C? ton projet c'est bien un projet C++?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et si c'est bien du C++ : Peut-on voir la déclaration de la fonction en question, si sa définition n'est pas dans le même fichier source ?
    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.

  4. #4
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    c'est bien du C++.
    Je code sur une machine qui n'as pas acces à internet donc je peux pas copier-coller ici... c'est pourquoi j'ai d'abord réduit au strict minimum.
    La fonction est declarée ainsi (dans un fichier tools.h séparé):
    Elle est définie ainsi: (dans un fichier tools.cpp qui inclut le tools.h)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool isBigEndian()
    {
      int i = 0x00000001;
      char c = *(reinterpret_cast<char*>(&i));
      return !!c;
    }
    Dans le fichier qui contient le main, j'inclus tools.h et j'apelle simplement la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
      //...
      isBigEndian(); //pour tester
      //...
      retrun 0;
    }
    si je remplace le mot-clé bool par int dans les fichier tools.h et tools.cpp, ça marche.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    J'ai jamais vu ca:
    c'est quoi(double !!)?

  6. #6
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    ben !x ça retourne 1 si x vaut 0, et 0 si x vaut "tout sauf 0"
    donc !!x ça retourne 0 si x vaut 0, et 1 si x vaut "tout sauf 0"

    en gros, ça te permet de transformer un entier en une valeur qui ne peut être que 0 ou 1. Si tu veux, ça ramène les entiers non nuls sur 1.
    c'est vrai que ici c'est pas franchement utile, mais j'ai essayé en changeant cette ligne par:
    et par:
    et par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return static_cast<bool>(c);
    ça change rien...

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/12/2011, 17h48
  2. Quelles sont les différences entre les types char et int ?
    Par RayBradbury dans le forum Débuter
    Réponses: 3
    Dernier message: 27/03/2011, 16h10
  3. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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