Mélange bool / string [Résolu]

Roro8883 70 Messages postés mardi 25 février 2003Date d'inscription 1 février 2008 Dernière intervention - 21 sept. 2007 à 16:00 - Dernière réponse : Roro8883 70 Messages postés mardi 25 février 2003Date d'inscription 1 février 2008 Dernière intervention
- 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
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 21 sept. 2007 à 18:41
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++ (@++)

Merci SAKingdom 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

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

C++ (@++)

Merci SAKingdom 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de SAKingdom
DeAtHCrAsH 2674 Messages postés vendredi 25 janvier 2002Date d'inscription 6 février 2013 Dernière intervention - 21 sept. 2007 à 17:19
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
Roro8883 70 Messages postés mardi 25 février 2003Date d'inscription 1 février 2008 Dernière intervention - 21 sept. 2007 à 18:34
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
Roro8883 70 Messages postés mardi 25 février 2003Date d'inscription 1 février 2008 Dernière intervention - 21 sept. 2007 à 18:52
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
Roro8883 70 Messages postés mardi 25 février 2003Date d'inscription 1 février 2008 Dernière intervention - 21 sept. 2007 à 19:03
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.