Utilisation de pointeur sur fonctions

Fermé
Mourad2009B Messages postés 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023 - 18 avril 2018 à 21:03
Mourad2009B Messages postés 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023 - 19 avril 2018 à 18:24
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
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

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
19 avril 2018 à 00:44
Bonjour,

En C++ on utilise plutôt les
std::function<>
que les pointeurs de fonction.
Ici
ClasseBaseDeDonnees::recupererTout
semble être une fonction membre non statique.
Or la fonction
ClasseFunctCom::majTableView
attend 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
//....
}
0
Mourad2009B Messages postés 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023
19 avril 2018 à 18:24
merci Dalfab
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
0