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++

  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 397
    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 397
    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...

  7. #7
    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
    Ok tout simplement! C'est bien ce que pensai mais je trouvai ca bizarre autant pour moi.

    Sinon tu dis que tu inclus tools.h mais tools.cpp il est aussi inclus dans ton projet? je veux dire tools est pas dans une lib?

  8. #8
    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
    non il est aussi inclus.

    entre-temps, j'ai reussi � resoudre le probl�me, mais j'ai pas compris comment:

    j'inclus deux fichiers: serial.h et tools.h. J'ai juste chang� pour inclure tools.h avant serial.h, et maintenant �a marche...
    Par contre j'ai beau chercher dans serial.h, je ne vois pas ce qui pose probl�me... (je cherche un [extern "C"] ou un [typedef bool int], mais rien qui ressemble � �a...)
    mais bon. pour l'instant �a fonctionne. Merci de m'avoir r�pondu!
    a+

  9. #9
    Membre �clair�
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Par d�faut
    A mon avis le probl�me est que tu renvoies soit 0 soit 1, donc de type int, et que ta fonction est d�finie pour renvoyer un bool�en ...

    Sinon un petit cast du !!c dans le return devrait �viter � Visual de confondre un bool�en qu'il attend en retour avec un int que tu lui envoies

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