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 :

Pourquoi le code ne reconnait pas que arg2 est un string.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    aucun
    Inscrit en
    Avril 2012
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 152
    Par défaut Pourquoi le code ne reconnait pas que arg2 est un string.
    Bonjour,

    Je suis un debutant en c++. Je travaille avec les c++ & j'essaie de faire des fractions pour m'entrainer. Mais, il y a un problème avec la condition. Ma variable arg2 est un string pourtant il ne peut pas detecter les string.

    \projects\training\training\head.h(19) : error C2678: '==' binaire*: aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'std::string' (ou il n'existe pas de conversion acceptable)

    head.h
    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
    24
    #include <iostream>
    #include "fraction.h"
    using namespace std;
     
    fraction::fraction(int arg1,int arg2)
    {
    	m_numerateur = arg1;
    	m_denominateur = arg2;
    	m_decimal = arg1/arg2;
    }
     
    int fraction::getDenominateur() const
    {
    	return m_denominateur;
    }
     
    double fraction::calculer(fraction &arg1,string arg2,fraction &arg3)
    {
    	if(arg2 == "a")
    	{
    		return 1;
    	}
    	return 0;
    }
    fraction.h
    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
    #ifndef FRACTION_H
    #define FRACTION_H
    #include <iostream>
    using namespace std;
     
    class fraction
    {
    private:
    	int m_numerateur;
    	int m_denominateur;
    	double m_decimal;
     
    public:
    	fraction(int arg1 = 0,int arg2 = 1);
    	double calculer(fraction &arg1,string arg2,fraction &arg3);
    	int getDenominateur() const;
    };
    #endif

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Salut

    Parce qu'il n'existe pas d'opérateur == pour comparer une string et un const char*. Écris :
    Sinon, pourquoi utiliser comme nom "arg1", "arg2", etc ? Masochisme ?
    Pourquoi des références et pas des références constantes ?

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Parce qu'il n'existe pas d'opérateur == pour comparer une string et un const char*.
    Un tel opérateur existe, mais pour ça, il faut avoir inclus <string>. Pour l'instant, tu as si ça se trouve un petit bout de la classe string qui arrive par hasard lié au fait que tu aies inclus <iostream>, mais pour avoir accès à l'ensemble des fonctionnalités des string, inclure <string> est requis.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    bon je vais me coucher, je crois que c'est préférable...

  5. #5
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    Ton head.h doit être nommé fraction.cpp, c'est le fichier source de ton header fraction.h
    Pour pourvoir utiliser les strings tu dois avoir inclue la bibliothèque string :
    De plus il est fortement conseillé de ne pas mettre using namespace std dans tes headers.(remplacer par std::string)
    Tu dois aussi préciser le changement de int en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	m_decimal = (double)arg1 / (double)arg2;

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    Par défaut
    Citation Envoyé par PilloBuenaGente Voir le message
    Bonsoir,
    Ton head.h doit être nommé fraction.cpp, c'est le fichier source de ton header fraction.h
    Pour pourvoir utiliser les strings tu dois avoir inclue la bibliothèque string :
    De plus il est fortement conseillé de ne pas mettre using namespace std dans tes headers.(remplacer par std::string)
    Tu dois aussi préciser le changement de int en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	m_decimal = (double)arg1 / (double)arg2;
    La construction d'un std::string à partir d'un const char * n'est pas explicite (sources).
    Donc dès qu'on passe un const char * au lieu d'un std::string, il sera automatiquement convertit en std::string.

    Si je me souviens bien, on peut avoir jusqu'à 3 conversions en utilisant les constructeurs implicites et les opérateurs de conversions.

  7. #7
    Membre très actif
    Homme Profil pro
    aucun
    Inscrit en
    Avril 2012
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 152
    Par défaut
    merci. ça marche.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/05/2014, 15h28
  2. diaporama: pourquoi mon code ne marche pas
    Par secondechance dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/05/2009, 02h04
  3. pourquoi mon code ne fonctionne pas
    Par jmlb35 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/06/2008, 19h02
  4. je ne sais pas pourquoi ce code ca marche pas
    Par debutantasp dans le forum ASP
    Réponses: 14
    Dernier message: 23/11/2007, 17h10
  5. Réponses: 2
    Dernier message: 31/07/2006, 08h48

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