Mélange bool / string [Résolu]

Messages postés
70
Date d'inscription
mardi 25 février 2003
Dernière intervention
1 février 2008
- - Dernière réponse : Roro8883
Messages postés
70
Date d'inscription
mardi 25 février 2003
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
3
Merci
"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++ (@++)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
3
Merci
Oui ou alors utiliser les bons vieux char * à la place de l'énorme classe string.

C++ (@++)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
0
Merci
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
Commenter la réponse de DeAtHCrAsH
Messages postés
70
Date d'inscription
mardi 25 février 2003
Dernière intervention
1 février 2008
0
Merci
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 !
Commenter la réponse de Roro8883
Messages postés
70
Date d'inscription
mardi 25 février 2003
Dernière intervention
1 février 2008
0
Merci
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 !
Commenter la réponse de Roro8883
Messages postés
70
Date d'inscription
mardi 25 février 2003
Dernière intervention
1 février 2008
0
Merci
Merci, ça marche parfaitement bien avec les char* !!!
Commenter la réponse de Roro8883

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.