Mélange bool / string

Résolu
Roro8883 Messages postés 70 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 1 février 2008 - 21 sept. 2007 à 16:00
Roro8883 Messages postés 70 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 1 février 2008 - 21 sept. 2007 à 19:03
Bonjour à tous !

J'ai un problème dans mon code, dans une classe.
Voici les lignes posant problème :

      int put_value (bool value, string file = "");
      int put_value (string value, string file = "");

En fait le problème se pose lorsqu'on appelle la fonction put_value (string).
En effet, le "string" passé en paramètre est utilisé par le 1ère fonction en tant que booleen (= true) !
Donc la fonction appelée n'est pas la bonne.

La seule méthode que j'ai trouvé c'est de faire un cast : (string) variable, pour bien définir qu'il s'agit d'un string.
Ou alors il faut d'abord déclarer la vaiable comme suit :
    string var;
    put_value (var);

N'y aurait-il pas un moyen pour éviter la confusion ?
pour appeler obligatoirement la 2ème fonction, avant la première (comme ça si c'est un string, ça utilise cette fonction, sinon ça va voir l'autre) ?

Merci

6 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 sept. 2007 à 18:41
"Bonjour" n'est pas considéré comme un string mais comme un pointeur char.

À preuve:

void test (string test)
{
    cout << (char*)test << endl;
}

int main()
{
    test("Bonjour");
    return 0;
}

On aura un message d'erreur à la compilation.

C++ (@++)
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 sept. 2007 à 18:54
Oui ou alors utiliser les bons vieux char * à la place de l'énorme classe string.

C++ (@++)
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
21 sept. 2007 à 17:19
C'est une blague ?
Faudrait penser à ouvrir des bouquins de C/C++ au lieu de jouer les apprentis sorciers!

Le principe de la surcharge se base sur le prototype des fonctions.
Deux fonctions peuvent avoir le même nom à condition que au moins un de leur paramètre diffère de part son type.
Ensuite c'est lors de l'appel que la distinction va se faire.
Dans ton cas si tu lui passes un bool c'est la 1ère surcharge qui sera appellée, et si tu lui passes une string, ce sera la 2ème surcharge.
En gros c'est a toi de savoir quelle est la surcharge dont tu as besoin et de lui passer les bons paramètres!

Shell
0
Roro8883 Messages postés 70 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 1 février 2008
21 sept. 2007 à 18:34
Eh c'est bon, je pose juste une question pour progresser en C/C++, on peut pas savoir tout tout de suite !

J'ai bien compris le principe de la surchage des fonctions.
C'est pour cela que dans mon code, j'ai bien mis des paramètres différents de par leur type (bool et string) :
      int put_value (bool value, string file = "");
      int put_value (string value, string file = "");

Je comprends pas pourquoi tu t'énerves comme ça ....

Le problème (je l'ai peut-être mal exprimé), est qu'un string est parfois pris pour un bool.
J'explique :
    - Quand je tape :
                             put_value (true)
      et bien la fonction avec le BOOL est appelée (donc pas de problème)

    - Quand je tape :
                             string variable;
                             put_value (variable);
      et bien la fonction avec le STRING est appelée (donc pas de problème)

    - Seulement, lorsque je tape :
                            put_value ("Bonjour");
      et bien ça appelle la fonction BOOL et non string (donc problème)

    - Pour empêcher le problème il faut taper (par exemple) :
                            put_value ((string) "Bonjour");
      et là, c'est bien la fonction STRING qui est appelée (donc problème réglé)

Ma question était donc tout-à-fait pertinente, parce que pour moi, quand je vois "Bonjour", il s'agit d'un string, alors que pour le compilateur, il s'agit d'un bool.
Je voulais juste savoir pourquoi ?!

Et j'aimerais savoir s'il existait un moyen plus simple de faire un (string) "Bonjour", comment faire pour enlever le (string) ?

PS: Pour ton information, j'ai lu pas mal de bouquins, visiter pas mal de sites web (pour la surchage des fonctions en partie)
      J'aime bien comment les débutant sont rembarrés aussi !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Roro8883 Messages postés 70 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 1 février 2008
21 sept. 2007 à 18:52
D'accord, donc il faudra toujours mettre un (string) avant le "Bonjour" pour qu'il soit considéré comme tel ?!
(sauf si la chaine est déclarée avant comme string)

Merci pour cette réponse constructive !
0
Roro8883 Messages postés 70 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 1 février 2008
21 sept. 2007 à 19:03
Merci, ça marche parfaitement bien avec les char* !!!
0
Rejoignez-nous