Utilisation de pointeur sur fonctions
Mourad2009B
Messages postés
123
Date d'inscription
Statut
Membre
Dernière intervention
-
Mourad2009B Messages postés 123 Date d'inscription Statut Membre Dernière intervention -
Mourad2009B Messages postés 123 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous;
J’ai essayé d’utiliser les pointeurs sur fonction, mais je suis bloqué est pourtant l’erreur n’est pas apparente.
Remarque : j’ai supprimé le code inutile pour augmenter la lisibilité.
Donc voici mon code.
J’ai une fonction
Dans la quelle j’utilise le pointeur sur fonction //LIGNE A
Ensuite j’ai la fonction suivante que je pointe
Ensuite j’ai une fonction dans la quelle j’appelle une fonction par son pointeur //LIGNE B
Mais quand je lance le programme, jai l’erreur suivante
qui est juste devant la ligne
et je ne vois vraiment pas où est le bug
sachant que
MainWindow hérite de ClasseFunctCom
Et ClasseFunctCom hérite de ClasseBaseDeDonnees
Merci d’avance pour votre aide
J’ai essayé d’utiliser les pointeurs sur fonction, mais je suis bloqué est pourtant l’erreur n’est pas apparente.
Remarque : j’ai supprimé le code inutile pour augmenter la lisibilité.
Donc voici mon code.
J’ai une fonction
void ClasseFunctCom::majTableView(void (*pf)(QStandardItemModel* model, std::string table_name), QTableView *tableView, string name_table)
{
//Si la base de données a était ouverte on continue, et on affecte la table des produits brutes au model
connexion();
//On déclare le model
//QSqlTableModel *modelTable = new QSqlTableModel(0, _db);
QStandardItemModel* model = new QStandardItemModel();
//On recupere les éléments et on remplit le model avec le pointeur sur fonction;
(*pf)(model, name_table); //LIGNE A
//On affecte le model à la table view
tableView->setModel(model);
//Autres code
}
Dans la quelle j’utilise le pointeur sur fonction //LIGNE A
Ensuite j’ai la fonction suivante que je pointe
void ClasseBaseDeDonnees::recupererTout(QStandardItemModel* model, std::string table_name)
{
//code a réalisé
}
Ensuite j’ai une fonction dans la quelle j’appelle une fonction par son pointeur //LIGNE B
void MainWindow::supprimerElements()
{
//Autres code
//On fait une mise a jour de la tableview
majTableView(recupererTout, tableViewActuelle, name_table); //LIGNE B
//On aafiche un message de satisfaction a l'utilisateur.
QMessageBox::information(this, QObject::tr("Succès"), QString::number(nbrElmtsSupprimer)+" "+QObject::tr("élément(s) supprimé(s)"));
}
Mais quand je lance le programme, jai l’erreur suivante
D:\Fichiers applications\C++\Projets_QtCreator\Projet_memo_movies\Memo_movies\MainWindow.cpp:56: erreur : no matching function for call to 'MainWindow::majTableView(<unresolved overloaded function type>, QTableView*&, std::__cxx11::string&)'
majTableView(recupererTout, tableViewActuelle, name_table);
qui est juste devant la ligne
majTableView(recupererTout, tableViewActuelle, name_table);
et je ne vois vraiment pas où est le bug
sachant que
MainWindow hérite de ClasseFunctCom
Et ClasseFunctCom hérite de ClasseBaseDeDonnees
Merci d’avance pour votre aide
A voir également:
- Utilisation de pointeur sur fonctions
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- La ressource demandée est en cours d'utilisation - Forum Téléphones & tablettes Android
1 réponse
Bonjour,
En C++ on utilise plutôt les
Ici
Or la fonction
Si la fonction doit être membre non statique, il faut bien la définir en paramètre comme telle
En C++ on utilise plutôt les
std::function<>que les pointeurs de fonction.
Ici
ClasseBaseDeDonnees::recupererToutsemble être une fonction membre non statique.
Or la fonction
ClasseFunctCom::majTableViewattend en paramètre un pointeur de fonction qui doit donc être une fonction non membre ou bien une fonction membre statique.
Si la fonction doit être membre non statique, il faut bien la définir en paramètre comme telle
void ClasseFunctCom::majTableView(void (ClasseBaseDeDonnees::*pf)(QStandardItemModel* model, std::string table_name), QTableView *tableView, string name_table){ //..... //On recupere les éléments et on remplit le model avec le pointeur membre sur fonction membre; (this->*pf)(model, name_table); // on a accède //.... }
ta solution à l'air de marché en plus j'ai appris beaucoup de choses avec ta réponse, je vais teser ta solution et je te tiendrai au courant
merci beaucoup