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

Langage C++ Discussion :

Erreur d'opérande ==


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 25
    Par défaut Erreur d'opérande ==
    Bonjour

    Je sais que les erreur d'operande == sont fréquente sur internet, mais même en cherchant, je n'arrive pas à résoudre ce problème... Peut être que je ne connait pas assez le c++ tout simplement
    Mais voila, j'essaie de coder un moteur d'inférence en c++, pour cela j'ai une classe Rule dont le .h est le suivant:

    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
    #include "stdafx.h"
     
    class Rule{
    public:
    	std::list<IFact> Premises;
    	IFact conclusion;
    	std::string Name;
    	Rule::Rule(std::list<IFact> _premises,IFact _conclusion, std::string _name);
    	std::list<IFact> getPremises(){return Premises;};
    	IFact getConclusion(){return conclusion;};
    	std::string getName(){return Name;};
    	void setPremises(std::list<IFact> premises);
    	void setConclusion(IFact _conclusion);
    	void setName(std::string _name);
    	bool Rule::operator==(const Rule &other) const;
    };
    Le .cpp est le suivant:

    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
    #include "stdafx.h"
     
    void Rule::setPremises(std::list<IFact> _premises){
    	Premises=_premises;
    }
    void Rule::setConclusion(IFact _conclusion){
    	conclusion=_conclusion;
    }
    void Rule::setName(std::string _name){
    	Name=_name;
    }
    Rule::Rule(std::list<IFact> _premises,IFact _conclusion, std::string _name){
    	Premises=_premises;
    	conclusion=_conclusion;
    	Name=_name;
    }
    	bool Rule::operator==(const Rule &other) const{
    		return(Premises==other.Premises
    			&&Name == other.Name
    			&&conclusion==other.conclusion);
    	}
    J'ai commencé a surchargé l'operateur == parce que l'utilisation d'une list<Rule> et sa fonction remove m'obligeait d'en faire un. Toutefois une erreur apparait ici:'==' binaire*: aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const IFact' (ou il n'existe pas de conversion acceptable)
    et l'erreur:'==' binaire*: aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const std::string'

    Pour information voici IFact.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "stdafx.h"
    class IFact{
    	public:
    		virtual std::string getName();
    		virtual void* getValue();
    		virtual int getLevel();
    		virtual void setLevel(int p);
    		virtual bool isEquals(std::string);
    };
    Merci de m'apporter vos lumières éclairés^^. Et dans le cas ou vous avez des aides à m'apporter sur le moteur d'inférence, hésitez pas, je galère un peu. Mais je sors aussi du sujet.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ça sent vraiment le soufre, de faire une liste contenant par valeur des objets d'une classe clairement faite pour utiliser le polymorphisme de référence ou pointeur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 25
    Par défaut
    Il faudrait donc modifié ma list<IFact> de ma classe Rule en list<IFact*>. J'imagine qu'il est plus propre de contenir les adresses de mes objets dans les listes que la valeur de mes objets. Du coup j'ai modifié mon opérateur== aussi pour qu'il continue de tester les objet et non les adresses mémoires. Mais je continue d'avoir les deux même erreurs concernant le name et la conclusion

    Le nouveau Rule.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
    17
    18
    19
    20
    21
    #include "stdafx.h"
     
    void Rule::setPremises(std::list<IFact*> _premises){
    	Premises=_premises;
    }
    void Rule::setConclusion(IFact* _conclusion){
    	conclusion=_conclusion;
    }
    void Rule::setName(std::string _name){
    	Name=_name;
    }
    Rule::Rule(std::list<IFact*> _premises,IFact* _conclusion, std::string _name){
    	Premises=_premises;
    	conclusion=_conclusion;
    	Name=_name;
    }
    	bool Rule::operator==(const Rule &other) const{
    		return(Premises==other.Premises
    			&&Name == other.Name
    			&&*conclusion==*other.conclusion);
    	}

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Je ne vois pas pourquoi tu aurais un problème pour Name, et je ne vois pas pourquoi tu jouerais avec des rvalue references pour une opération purement en lecture (Mais ça peut être lié au fait que tu n'aies pas déclaré tes getters const).

    Le problème de Conclusion, c'est que tu cherches à nouveau à comparer deux IFact sans dire au compilateur comment faire. Il faut que tu surcharges l'opérateur == pour les IFact pour causer un appel à isEquals().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 25
    Par défaut
    Effectivement ça venait de mes getters et du manque d'un equals pour IFact
    Merci de ton aide

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

Discussions similaires

  1. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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