Utilisation de pointeur sur fonctions
Mourad2009B
Messages postés
145
Statut
Membre
-
Mourad2009B Messages postés 145 Statut Membre -
Mourad2009B Messages postés 145 Statut Membre -
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
1 réponse
-
Bonjour,
En C++ on utilise plutôt lesstd::function<>
que les pointeurs de fonction.
IciClasseBaseDeDonnees::recupererTout
semble être une fonction membre non statique.
Or la fonctionClasseFunctCom::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 tellevoid 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 //.... }