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 :

[C++] probleme d'evaluation de type


Sujet :

C++

  1. #1
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut [C++] probleme d'evaluation de type
    Bonsoir,
    avec le morceau de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	std::map<std::string, void (ServerConfig::*)(const char *)>::const_iterator item = _item_map.find(attr->Name());
    	if (item != _item_map.end())
    		(item->second)("toto");
    j'obtiens l'erreur (je compile avec Visual Studio):
    error C2064: term does not evaluate to a function taking 1 arguments
    sur l'appel (item->second)("toto");. Quelqu'un peut resoudre ca?
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (item->*second)("toto");
    Par ailleurs, tu devrais faire un typedef pour ta map...

  3. #3
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    salut,
    j'obtiens cette fois-ci:
    error C2065: 'second' : undeclared identifier

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Par défaut
    Ta fonction semble nécessiter un objet de classe ServerConfig pour être appelée, et je n'en vois aucun dans ton code.

  5. #5
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    Désolé, je n'ai pas bien précisé certains éléments.
    J'ai une classe ServerConfig, qui contient un membre privé _item_map déclaré comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::map<std::string, void (ServerConfig::*)(const char *)> _item_map;
    Voici le contructeur de la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ServerConfig::ServerConfig()
    {
    	_item_map["port"] = &ServerConfig::set_port;
    	_item_map["log_path"] = &ServerConfig::set_log_path;
    	_item_map["n_max_connection"] = &ServerConfig::set_n_max_connection;
     
    	_port = 80;
    	_log_path = "toto.log";
    	_n_max_connection = 4200;
     
    }
    (à ce propos, pourquoi _item_map["port"] = &set_port; ou _item_map["port"] = set_port; ne compilent pas?)

    Maintenant la méthode privée qui exploite la map:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void ServerConfig::parse_xml_element(TiXmlElement *elmt)
    {
    	if (elmt != 0)
    		if ((std::string(elmt->Value())) == std::string("item"))
    			for (TiXmlAttribute *attr = elmt->FirstAttribute(); attr; attr = attr->Next())
    			{
    				(_item_map.find(attr->Name())->second)("toto");
    			}
    }
    l'implémentation est écrite autrement que dans mon premier post, mais j'ai la meme erreur.
    En espérant avoir été plus clair...

    PS: s'il y a une manière plus élégante que les maps pour effectuer le meme traitement, je suis preneur.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oups oui... J'ai répondu un peu précipitemment. Ceci devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (this->*(item->second))("toto");
    (à ce propos, pourquoi _item_map["port"] = &set_port; ou _item_map["port"] = set_port; ne compilent pas?)
    Tout simplement parce que ce n'est pas la bonne syntaxe (même si certains compilos l'acceptent).

  7. #7
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    tiens c'est étonnant qu'on soit obligé de passer par le pointeur d'instance... il y a une raison particulière ou c'est simplement à savoir? (idem pour le besoin de nommer la classe dans l'affectation _item_map["port"] = &ServerConfig::set_port;)

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

Discussions similaires

  1. Probleme avec champ de type LONG
    Par Youby dans le forum Oracle
    Réponses: 11
    Dernier message: 17/01/2006, 16h26
  2. Probleme d'evaluation sur une liste numérique
    Par cryptorchild dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2006, 19h39
  3. Probleme Alter - Changer le type d'un champ
    Par Yphon dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/09/2005, 13h58
  4. Probleme de redefinition de type
    Par Mehdi Feki dans le forum C++
    Réponses: 8
    Dernier message: 21/05/2005, 00h27
  5. [LG]Problême Variable dynamique de types différents
    Par pierrOPSG dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2004, 16h01

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