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 :

erreur de type


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 417
    Billets dans le blog
    16
    Par défaut erreur de type
    bonjour,

    je ne comprends pas cette erreur de compilation:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    std::vector<std::string> Tgrammaire::suivants(std::string const &A){
      std::map<std::string,std::vector<std::string>> dicoContenant;
      std::vector<std::string> listeTete,groupe,pile,suiv,temp;
      std::string T;
         dicoContenant=creerDicoContenant(A,listeTete);//listeTetes en alias,
         						   //initialisé ici
         for(auto tete:listeTete)
    	for(auto prod:dicoContenant[tete])
    	  if(prod.back()==A)
    ...
     
    std::map<std::string,std::vector<std::string>> Tgrammaire::creerDicoContenant(std::string const &A,std::vector<std::string> &listeTetes){
      std::map<std::string,std::vector<std::string>> ret;
      for(auto tete:nonTerms) //nonTerms est le vector des têtes de production
        for(auto prod:grammaire[tete]) //grammaire[tete] (grammaire est un dictionnaire comme dicoContenant) est
        	     			   //l'ensemble des productions dont la tête est la valeur du string tete
          if( ! absent(A,prod) && tete!=prod.back()){
    	ret.insert(std::pair<std::string,
    		     std::vector<std::string>>(tete,prod));
    	  listeTetes.push_back(tete);
          }
      return ret;
    }
     
    bool Tgrammaire::absent(std::string const &elem,
    			std::vector<std::string> const &liste){
      int i;
      bool ret;
      for(i=0;i<liste.size() && elem!=liste[i];i++)
        ;
      if(i==liste.size())
        ret=true;//elem est absent
      else
        ret=false;
      return ret;
    }
     
     
    ligne 9: error: no match foroperator==’ (operand types are ‘__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type’ {aka ‘char} andconst string’ {aka ‘const std::__cxx11::basic_string<char>’})
      195 |    if(prod.back()==A && absent(tete,pile))
          |       ~~~~~~~~~~~^~~
          |                |   |
          |                |   const string {aka const std::__cxx11::basic_string<char>}
          |                __gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type {aka char}
    il me semble pourtant que prod est un vector<string> et que, donc, prod.back() est un string, comme A.

    quelqu'un a une idée?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bah... non ?
    Le compilo a souvent raison, et cette fois encore.
    Le truc est illisible mais dicoContenant c'est une map<string, vector<string>>, donc dicoContenant[test] est vector<string> et donc prod qui itère dessus donc retourne une string.
    Donc forcément prod.back c'est un char.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 417
    Billets dans le blog
    16
    Par défaut
    Merci de m'avoir répondu.
    je dois donc faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::vector<std::string> listeTete,groupe,pile,suiv,temp,prod;
    for(auto tete:listeTete){
       prod=dicoContenant[tete];
       if(A==prod.back())
       ...
    }

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

Discussions similaires

  1. [VB]erreur de type
    Par amel95140 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/01/2006, 14h51
  2. Réponses: 1
    Dernier message: 12/12/2005, 03h39
  3. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 21h06
  4. erreur Data type mismatch in criteria expression
    Par bachilbouzouk dans le forum ASP
    Réponses: 3
    Dernier message: 20/04/2005, 11h48
  5. [Agents services] Erreur de types imcompatibles
    Par ApollloCrid dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 14/04/2005, 19h47

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