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 :

une fonction qui retourne un bool


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut une fonction qui retourne un bool
    bonjour, je cherche à créer une fonction booléenne.

    MaClasse.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public bool getToto()
    MaClasse.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #undef ROUT
    #define ROUT "MaClasse::getToto"
     
    bool MaClasse::getToto()
    {
      if(maCondition1 == maCondition2)
      {
        return true;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    warning C4805: '==' : unsafe mix of type 'bool (__cdecl MLogin::*)(void)' and type 'const bool' in operation
    error C2446: '==' : no conversion from 'int' to 'bool (__cdecl MLogin::*)(void)'
    je ne comprends pas trop ce qu'il me dit le Monsieur...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Quelle est cette écriture ?!
    Citation Envoyé par Magno Voir le message
    MaClasse.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public bool getToto()
    tu viens de la planète JAVA ou C# ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class MyClass { public: bool getToto(); }
    bool MyClass::getToto() { return true; }
    Citation Envoyé par Magno Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    warning C4805: '==' : unsafe mix of type 'bool (__cdecl MLogin::*)(void)' and type 'const bool' in operation
    error C2446: '==' : no conversion from 'int' to 'bool (__cdecl MLogin::*)(void)'
    je ne comprends pas trop ce qu'il me dit le Monsieur...
    Quelles sont les lignes qui retournent ces erreurs ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    Oui je connais essentielement le C# (je suis étudiant, et débutant)...

    j'ai une 2eme classe ou j'apelle ma fonction :

    Maclasse2.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // déclaration de mon object
    MaClasse titi;
     
    if(titi.GetToto() == vraix)
    {
      instruction 1
    }
    else
    {
     instruction 2
    }

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Bonjour,

    Simple erreur d’inattention :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bool MaClasse::getToto()
    {
      if(maCondition1 == maCondition2)
      {
        return true;
      }
    }
    Et si ta condition n'est pas vérifié, ta fonction retourne quoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool MaClasse::getToto()
    {
      return maCondition1 == maCondition2;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(titi.getToto() == vraix)
    C'est un booléen pas la peine de mettre un "vraix". De plus, on ne sait pas où tu défini ce "vraix".
    @Bousk :
    Il me semble bien que la notation :
    public monPrototype;est acceptée.

  5. #5
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    si ma fonction n'est pas vérifié je veux juste qu'elle me retourne faux, et vraix si elle est vérifié.
    Merci d'avoir corriger mon erreur.
    Je testerai lundi mes modifications pq mon tp n'a plus de baterie...

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #undef ROUT
    #define ROUT "MaClasse::getToto"
    Au vu des lignes ci-dessus et vu l'erreur, je mise sur une ligne de type if (ROUT==false).
    1=> if (foo.ROUT()==false) devrait mieux se passer
    2=> mais surtout oublie les #define.

  7. #7
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    Merci d'avoir répondu aussi vite.

    dans ma classe MaClasse.cpp

    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
     
    #undef ROUT
    #define ROUT "MaClasse::getToto"
     
    bool MaClasse::getToto()
    {
      if(maCondition1 == maCondition2)
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    dans maClasse2.cpp

    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
     
    #undef  ROUT
    #define ROUT "maClasse2::tutu"
    void maClasse2::tutu()
    {
      maClasse monObjet;
     
      if(monObjet.getToto() == true)
      { 
      instruction 1
      }
      else
      {
        instruction 2
      }
    }

    C'est un booléen pas la peine de mettre un "vraix". De plus, on ne sait pas où tu défini ce "vraix".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(titi.getToto())


    J'ai testé dans ma fonction getToto() dans maClasse, les deux conditions, elle me retourne bien true quand la condition est "==" et false quand elle est "!=". Mais quand je la véréfie dans maClasse2, if(monObjet.getToto() == true) me retourne toujours vrais, meme quand mon getToto() = false, alors je ne comprends pas. Moi ce que j'essai, c'est de récupérer mon booleen dans ma fonction getToto() (true ou false) pour pouvoir ensuite la vérifié dans mon if(monObjet.getToto()) == true)...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Je ne comprends pas du tout ton problème.
    Mais ce qui est sûr c'est que si getToto() retourne vrai c'est que son code indiquer qu'il doit retourner true. Et ce n'est pas l'appel à getToto ou la gestion de son retour qui bug.

    J'ai testé dans ma fonction getToto() dans maClasse, les deux conditions, elle me retourne bien true quand la condition est "==" et false quand elle est "!=". Mais quand je la véréfie dans maClasse2, if(monObjet.getToto() == true) me retourne toujours vrais, meme quand mon getToto() = false, alors je ne comprends pas. Moi ce que j'essai, c'est de récupérer mon booleen dans ma fonction getToto() (true ou false) pour pouvoir ensuite la vérifié dans mon if(monObjet.getToto()) == true)...
    Peux-tu traduire en mots simples et claires ce que tu sembles vouloir expliquer ?

    getToto c'est une méthode de Class1.
    Class2 veut appeler getToto, il lui faut un objet de Class1 à manipuler.
    D'où sort cet objet ? comment as-tu fait le test de getToto ? Sur quel objet ?
    Et quelle est cette condition == ou != que tu indiques ?

    Ton message est pas clair, pas clair et pas clair. En plus d'être embrouillant et incompréhensible.
    Au bout d'un moment si ta condition bug, il faudrait qu'on la voie cette condition !
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    désolé d'être aussi maladroit dans mes explications.
    Alors j'ai deux classes maClasse et maClasse2. maClasse1 a une méthode getToto et maClasse2 à une méthode valider().

    dans ma méthode getToto(), je veux que ma méthode me retourne un vraix ou un faux comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #undef ROUT
    #define ROUT "MaClasse::getToto"
    bool MaClasse::getToto()
    {
      if(maCondition1 == maCondition2)
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    ensuite je veux faire appel a cette fonction dans maClasse2, et je veux faire cet appel dans la méthode valider(). Pour ce faire j'ai créé un objet : monObjet de maClasse1 :

    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
     
    #undef  ROUT
    #define ROUT "maClasse2::valider"
    void maClasse2::valider()
    {
      maClasse monObjet;
     
      if(monObjet.getToto() == true)
      { 
      instruction 1
      }
      else
      {
        instruction 2
      }
    }
    ma méthode getToto() dans maClasse1 va donc comparer 2 valeurs, si elles sont égales, la méthode me retournera vrai, sinon elle me retournera faux. Je vais faire appel a cette fonction dans l'autre classe, maClasse2. Si le booléen retourné par ma fonction getToto() est égale à vrai alors il éxécute les instructions1, sinon il éxécute l'instruction2.

    problème :

    Quand ma méthode getToto() retourne vrai je passe bien dans boucle instruction1, mais quand ma méthode getToto() retourne faux, elle ne va pas dans l'instruction2, elle execute l'instruction1.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Magno Voir le message
    problème :

    Quand ma méthode getToto() retourne vrai je passe bien dans boucle instruction1, mais quand ma méthode getToto() retourne faux, elle ne va pas dans l'instruction2, elle execute l'instruction1.
    Ceci étant approximativement strictement impossible
    - quel est le vrai code ? getToto ? valider ?
    - comment t'assures-tu que le retour est vraiment true et non false ?

    btw, les erreurs du message original sont-elles toujours présentes ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    Ici pour le getToto(), pour vérifier ma condition j'ai fait un printf, donc je sais dans quel condition je me trouve.

    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
     
    #undef ROUT
    #define ROUT "MLogin::GetLogin"
     
    bool MLogin::GetLogin() 
    {
      CString site, site2;
     
      site = montableau[0].Site1;
      site2 = TParam::GetPSZVal(PVI_SITE);
     
      if(site == site2)
      {
        printf("est vrais%s" , site);
        return true;
      }
      else
      {
        printf("est faux %s\n", site);
        printf("est faux %s\n", site2);
        return false; 
      }
    }
    pour la fonction valider()

    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
     
    #undef  ROUT
    #define ROUT "maClasse2::valider"
    void maClasse2::valider()
    {
      maClasse monObjet;
      CString   bon, mauvais;
     
    bon = " bon";
    mauvais = "mauvais"
     
      if(monObjet.getToto() == true)
      { 
        MessageBox(bon);
      }
      else
      {
        MessageBox(mauvais);
      }
    }
    et c'est ici que je n'arrive pas comprendre a comprendre comment récupérer ma valeur booléenne retourner par ma méthode getToto()...
    Sinon pour ma 1ere erreur elle est réglé

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Les 2 codes que tu écris n'ont rien à voir
    - tu écris GetLogin et utilise GetToto
    - GetLogin est membre de MLogin
    - monObjet est un maClasse
    - valider est membre de maClasse2

    commence par remettre tout ça dans l'ordre, puis
    - d'où sort montableau[0] ?
    - comment est initialisé montableau ? montableau[0] ?

    - quel est cette macro ROUT ?

    Donc ton résultat dans la console serait
    est faux
    est faux
    bon
    ?
    seulement vu qu'on a à priori pas le code correct..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    le MLogin est une classe qui correspond dans mon exemple a maClasse, et getLogin() à getToto() (j'ai oublié de le remplacer en le copian)

    les tableaux :

    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
     
    class maClasse
    {
    private:
      CString     m_strOpeCod;  
      BOOL        m_fRetry;       
     
      struct STableau{
              char Ligne[20],Login[20],Site1[4],Site2[4],Site3[4],Site4[4],
                   Auto1[3],Auto2[3],Auto3[3],Auto4[3],Auto5[3];
                    };
     
      STableau montableau[20];
     
    public:
     
      bool getToto();

    Donc ton résultat dans la console serait
    est faux
    est faux
    bon
    ?
    dans un premier temps j'ai : est faux, est faux, mauvais
    et dans un deuxième temps : est vrai, mauvais

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Si ton résultat est celui-là et que ton test est vraiment comme tu l'as présenté, alors tu passes toujours dans le else et ton test est juste faux.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Une fonction qui retourne un tableau
    Par DooSquare dans le forum C
    Réponses: 18
    Dernier message: 04/07/2007, 21h15
  2. Comment créer une fonction qui retourne un tableau?
    Par Dereck07 dans le forum Delphi
    Réponses: 4
    Dernier message: 26/04/2007, 14h16
  3. DLL:exporter une fonction qui retourne un pointeur
    Par ephemeride dans le forum C++
    Réponses: 2
    Dernier message: 29/09/2006, 12h42
  4. Réponses: 7
    Dernier message: 03/12/2004, 13h40
  5. Réponses: 14
    Dernier message: 09/04/2004, 14h44

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