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 :

C** Declaration de tableau de pointeur de fonction


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Par défaut C** Declaration de tableau de pointeur de fonction
    Bonjour

    dans le cadre d'un exercice d'apprentissage du C++ (std=c++98) j'essaye de déclarer un tableau de pointeur de fonction mais une erreur survient lors de la compilation :
    array type 'PhoneBook::func' (aka 'void (PhoneBook::*[3])(...)') is not assignable
    this->_cmd_tab[add]. pfunc = &PhoneBook::_addContact;

    je ne vois pas d'ou viens l'erreur.

    mon tableau et type est declaré comme suit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PhoneBook::PhoneBook(void)
    {
    	std::cout << "Constructor PhoneBook Called" << std::endl;
            .....
    	this->_cmd_tab[add]. pfunc = &PhoneBook::_addContact;
    	this->_cmd_tab[search].cmd = DLG_INP_CMD_02;
    	this->_cmd_tab[search].pfunc = &PhoneBook::_searchContact;
    	this->_cmd_tab[exit].cmd = DLG_INP_CMD_03;
    	this->_cmd_tab[exit].pfunc = &PhoneBook::_exit;
    	return;
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
           public:
            .....
    	typedef void	(PhoneBook::*func[CMD_TAB_SIZE])(...);
    	struct 	Scmd
    	{
    		std::string 		cmd;
    		PhoneBook::func		pfunc;
    	} Tcmd;
     
          private:
           ....
          Scmd	_cmd_tab[CMD_TAB_SIZE];
    j'ai egalement une erreur das l'appel de la fonction
    srcs/PhoneBook.cpp:76:7: error: right hand operand to ->* has non-pointer-to-member type 'PhoneBook::func' (aka 'void (PhoneBook::*[3])(...)')
    (this->*_cmd_tab[nCmd].pfunc)(this);

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 757
    Par défaut
    Assez difficile de répondre il manque du code/ des éléments.

    Mais à vue de nez, ton code est mal fait

    Tu dois définir 1 type "pointeur de fonction membre" avec 1 signature (pas avec 1 ellipse ) et sans tableau, ni autre chose … type qui sert à "alléger" le code.
    Par exemple typedef void (PhoneBook::*func_do_something) (void);.

    Ensuite tu laisses ta structure Tcmd parce qu'elle semble associer 1 chaîne et 1 pointeur (le type de pfunc est donc func_do_something avec mon exemple).

    Et tu fais 1 tableau Tcmd tab_funcs[CMD_TAB_SIZE];.

    Après 1 rapide vérification, l'affectation semble bonne (évidemment si ta fonction membre a la bonne signature) : tab_funcs[add].pfunc = &PhoneBook::_addContact.
    Par contre l'appel risque d'être très moche (ou alors il faut soit utiliser des variables intermédiaires soit supprimer ton tableau) PhoneBook one_var; (one_var->*(tab_funcs[add].pfunc)) ();.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Par défaut
    merci pour ton aide j'ai pu corriger effectivement le typedef etait mauvais, et le prototype de mes fonctions appelé l’était pas le même .
    Concernant l'utilisation du '_' c'est pour distinguer les objets privé de public ( une norme )
    Quand a l'utilisation du tableau de pointeur de fonction. c'est juste pour apprendre a l’écrire et mettre en œuvre en C++ avec l'utilisation de classe

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

Discussions similaires

  1. Declarer un tableau de pointeur
    Par olibara dans le forum C#
    Réponses: 15
    Dernier message: 02/04/2008, 05h56
  2. tableau de pointeur de fonction
    Par exhortae dans le forum C
    Réponses: 2
    Dernier message: 31/12/2007, 12h33
  3. [BCB6]Tableau de pointeurs sur fonctions
    Par rtg57 dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/10/2006, 20h49
  4. Tableau de pointeur de fonction
    Par Gryzzly dans le forum C
    Réponses: 7
    Dernier message: 31/12/2005, 10h47
  5. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19

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